Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> избавиться от лишних символов в строке 
:(
    Опции темы
eXa
Дата 29.1.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



Код

char host[16];
char* hostport = "127.0.0.1:1234";
    for(i = 0; i < 9; i++)
        host[i] = hostport[i];
    printf("%s", host);     


Печать: 127.0.0.1♣С|    m♣С|▐┬┴wF¶

Что это за символы после IP? как от них избавиться? 

Это сообщение отредактировал(а) eXa - 29.1.2008, 21:23
PM MAIL   Вверх
archimed7592
Дата 29.1.2008, 21:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Терминирующий ноль забыл...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
eXa
Дата 29.1.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 1.12.2006

Репутация: нет
Всего: нет



Тоесть, после каждого полученого чара, добавлять ноль?O_o
Код
 
host[n] = 0; //

При использование чара в функциях, он тоже будет брать с символами или только нужные данные?(может просто при печати ток так  smile   )
Что делать когда n неизвестно?(как определить конец, ведь не strlen, не sizeof неподайдут) Если ток так канеш
Код

host[i+1] = 0;


Код

char host[16];
char* hostport = "127.0.0.1:1234"; //если  hostport не констакта берется в функции
    for(i = 0; i < 9; i++) // число 9 константа ток в примере, так переменная
        host[i] = hostport[i];
        host[i+1] = 0;
    printf("%s", host);   


Это сообщение отредактировал(а) eXa - 29.1.2008, 22:29
PM MAIL   Вверх
TeAnton
Дата 30.1.2008, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Вот как-то так надо.
Код


    char host[16];
    char* hostport = "127.0.0.1:1234";
    for(i = 0; i < 9; i++)
        host[i] = hostport[i];
    host[9] = 0
    printf("%s", host);  




PM MAIL   Вверх
Dov
Дата 30.1.2008, 14:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(eXa @  29.1.2008,  20:56 Найти цитируемый пост)
Что делать когда n неизвестно?

Ничего делать не нужно. После выхода из цикла переменная i укажет тебе длину получившейся строки. Поэтому нужно писать так:
Код
// ...
for(i = 0; i < 9; i++)
    host[i] = hostport[i];

host[i] = '\0';
// ...




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
TeAnton
Дата 30.1.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Я не уверен насчет того, какое значение будет в переменной i. Стандарта с++ я не знаю, так что бы отскакивало от зубов, но многие компиляторы, имеют право оптимизировать код и производить цикл for наоборот. Не знаю как с/с++, но я стараюсь везде переменную цикла после выхода из цикла считать неопределенной.
PM MAIL   Вверх
archimed7592
Дата 30.1.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(TeAnton @  30.1.2008,  14:48 Найти цитируемый пост)
Стандарта с++ я не знаю, так что бы отскакивало от зубов, но многие компиляторы, имеют право оптимизировать код и производить цикл for наоборот.

Не обязательно знать Стандарт, чтобы от зубов отскакивало. Достаточно запомнить один простой абзац:
Цитата

The semantic descriptions in this International Standard define a parameterized nondeterministic abstract
machine. This International Standard places no requirement on the structure of conforming implementations.
In particular, they need not copy or emulate the structure of the abstract machine. Rather, conforming
implementations are required to emulate (only) the observable behavior of the abstract machine as
explained below.5)
[...]
5) This provision is sometimes called the “as-if” rule, because an implementation is free to disregard any requirement of this International
Standard as long as the result is as if the requirement had been obeyed, as far as can be determined from the observable behavior
of the program. For instance, an actual implementation need not evaluate part of an expression if it can deduce that its value is not used
and that no side effects affecting the observable behavior of the program are produced.


Добавлено через 2 минуты и 26 секунд
И ещё один smile.
Цитата

The observable behavior of the abstract machine is its sequence of reads and writes to volatile data and
calls to library I/O functions.6)
[...]
6) An implementation can offer additional library I/O functions as an extension. Implementations that do so should treat calls to those
functions as ‘‘observable behavior’’ as well.


ps. Это 1-ый и 6-ой абзацы из п.1.9.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
TeAnton
Дата 30.1.2008, 16:15 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



А можно своими русскими словами? Я нефига не понял: "Не обязан следовать эмулировать абстрактную машину" "реализация свободно от различных требований" ничего не понял. Не такой уж мой английский язык хороший, чтобы это понять.
PM MAIL   Вверх
archimed7592
Дата 30.1.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(TeAnton @  30.1.2008,  16:15 Найти цитируемый пост)
А можно своими русскими словами?

Цитата

Описание семантики в этом Стандарте определяет параметризованную недетерминированную абстрактную машину. Этот Стандарт не предъявляет никаких требований к структуре соответствующих [этому Стандарту] реализаций. В частности, они не обязаны копировать или эмулировать структуру абстрактной машины. Наоборот, реализация должна эмулировать (только) видимое поведение абстрактной машины, как объяснено ниже.5)
[...]
Примечание 5) Это положение иногда называют правилом “как-если”, потому что реализация свободна пренебречь любым требованием этого станадрта при условии, что конечный результат будет таким же как если бы требование было соблюдено, насколько это возможно определить из видимого поведения программы. К примеру, реализация может не вычислять часть выражения если она может догадаться, что это значение не используется и никаких побочных явлений, влияющих на видимое поведение программы не будет.
[...]
Видимое поведение абстрактной машины представляет из себя последовательность чтения/записи volatile переменных и [порядок] вызовов библиотечных ф-ций ввода вывода.6)
[...]
Примечание 6) Реализация может предоставлять как расширение дополнительные ф-ции ввода/вывода. Такие реализации также должны расценивать вызовы этих ф-ций как "видимое поведение".


В кратце: компилятор имеет право оптимизировать что угодно, но "видимое поведение" после этих оптимизаций должно быть таким же, как если бы никаких оптимизаций он не делал бы и строго следовал бы букве закона(Стандарта).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
TeAnton
Дата 31.1.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



archimed7592, а идея понятная. Дело в том, что, например, в Delphi, четко прописано, считать переменную цикла, при выходе из цикла неопределенной.

Т.е. для цикла
Код

for i := 1 to 10 do 
begin
end;


i может быть равно 0, 1, 10, 11 либо мусору. Как точно в C++ я не знаю. Вдруг, там тоже есть такая оговорка для циклов.


PM MAIL   Вверх
archimed7592
Дата 31.1.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(TeAnton @  31.1.2008,  13:02 Найти цитируемый пост)
Дело в том, что, например, в Delphi, четко прописано, считать переменную цикла, при выходе из цикла неопределенной.

Delphi вообще немного странноватый язык, для которого помимо всего прочего ещё и нет международного стандарта.
Я достаточно долго работал с Delphi - после перехода на С++ ни разу не пожалел.

Цитата(TeAnton @  31.1.2008,  13:02 Найти цитируемый пост)
Вдруг, там тоже есть такая оговорка для циклов.
Нету.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
TeAnton
Дата 31.1.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Код

host[i] = '\0';


и закрывать тему?

-- offtop --
archimed7592, я на двух основных языках работаю. По мощи языка, C++ сильно обгоняет Delphi. Но по скорости разаботки, наваять за один день и отдать в продакшен, Delphi равных нет. Да и компилятор у них быстрый. 


PM MAIL   Вверх
archimed7592
Дата 31.1.2008, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(TeAnton @  31.1.2008,  13:28 Найти цитируемый пост)
и закрывать тему?

Немного не понял вопроса...

Цитата(TeAnton @  31.1.2008,  13:28 Найти цитируемый пост)
Но по скорости разаботки, наваять за один день и отдать в продакшен, Delphi равных нет. Да и компилятор у них быстрый. 

Достаточно распространённые, но, тем не менее, безосновательные "мифы" smile.



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Dov
Дата 31.1.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(TeAnton @  31.1.2008,  12:02 Найти цитируемый пост)
Дело в том, что, например, в Delphi, четко прописано, считать переменную цикла, при выходе из цикла неопределенной.

TeAnton, дело в том, что в С++ такое понятие, как переменная цикла сильно размыто. Потому что ты можешь объявить эту переменную вне цикла и это не повлияет ни на что. 
Код

int i = 0;
for( ; i < 9; )
{
    host[i] = hostport[i];
    i++;
}
host[i] = '\0';

Получился цикл while.  smile 

Это сообщение отредактировал(а) Dov - 31.1.2008, 13:48


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
TeAnton
Дата 31.1.2008, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 5.7.2007

Репутация: нет
Всего: нет



Dov, подсознательно я это чувствовал. Но все же надеялся, что while от for отличается больше, чем просто синтаксически.
archimed7592, может быть мы о разных Delphi говорим?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0905 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.