strncpy както глючно копирует
От: LinU  
Дата: 30.05.07 07:56
Оценка:
продолжение вчерашней темы про сломаный new

тот же фрагмент кода:

if(strUFP[i] == '=') 
{
CHAR* param = new CHAR[i];
strncpy(param, strUFP, i);
std::cout << param << " " << i <<std::endl;
.....
}


strUFP на входе равно allowuser=no

выводит вместо "allowuser" "allowuserath=C:\", те переменную PATH

в чем трабла??
Re: strncpy както глючно копирует
От: Анатолий Широков СССР  
Дата: 30.05.07 08:10
Оценка:
LU>strUFP на входе равно allowuser=no

LU>выводит вместо "allowuser" "allowuserath=C:\", те переменную PATH


LU>в чем трабла??


"Трабла" в завершающем нуле:


CHAR* param = new CHAR[i + 1]; // + 1 для завершающего нуля
strncpy(param, strUFP, i);
param[i] = '\0';
Re: strncpy както глючно копирует
От: brav  
Дата: 30.05.07 08:13
Оценка:
Здравствуйте, LinU, Вы писали:

LU>продолжение вчерашней темы про сломаный new


LU>тот же фрагмент кода:


..............

LU>strUFP на входе равно allowuser=no


LU>выводит вместо "allowuser" "allowuserath=C:\", те переменную PATH


LU>в чем трабла??



Да... LinU.... Тебе еще учиться и учиться . Ты бы хоть посчитал на пальцах, сколько тебе точно нужно символов под строку (учитывая завершающий НОЛЬ). Плюс к этому: завершающий ноль не ставится автоматически функцией strncpy. Его нужно поставить самому. Вот cout и выводит все подряд, пока не встретится какой-то случайно там оказавшийся нулевой символ.
brav
Re[2]: strncpy както глючно копирует
От: LinU  
Дата: 30.05.07 08:13
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>"Трабла" в завершающем нуле:



АШ>
АШ>CHAR* param = new CHAR[i + 1]; // + 1 для завершающего нуля
АШ>strncpy(param, strUFP, i);
АШ>param[i] = '\0';
АШ>


Спасибо большое! все работает
Re: strncpy както глючно копирует
От: av Россия  
Дата: 30.05.07 08:13
Оценка:
Здравствуйте, LinU, Вы писали:

LU>
LU>if(strUFP[i] == '=') 
LU>{
LU>CHAR* param = new CHAR[i];
LU>strncpy(param, strUFP, i);
LU>std::cout << param << " " << i <<std::endl;
LU>.....
LU>}
LU>


strncpy() не завершает строку нулём, если исчерпан предел буфера.
strncat() или std::string тебе поможет.
Re[2]: strncpy както глючно копирует
От: LinU  
Дата: 30.05.07 08:16
Оценка:
Здравствуйте, brav, Вы писали:

B>Здравствуйте, LinU, Вы писали:


LU>>продолжение вчерашней темы про сломаный new


LU>>тот же фрагмент кода:


B>..............


LU>>strUFP на входе равно allowuser=no


LU>>выводит вместо "allowuser" "allowuserath=C:\", те переменную PATH


LU>>в чем трабла??



B>Да... LinU.... Тебе еще учиться и учиться . Ты бы хоть посчитал на пальцах, сколько тебе точно нужно символов под строку (учитывая завершающий НОЛЬ). Плюс к этому: завершающий ноль не ставится автоматически функцией strncpy. Его нужно поставить самому. Вот cout и выводит все подряд, пока не встретится какой-то случайно там оказавшийся нулевой символ.


если бы я знал, что не завершает, тогда бы не спрашивал. изначально у меня i+1 память выделялась, просто проверить решил. на работе, документации никакой нет
Re: strncpy както глючно копирует
От: jazzer Россия Skype: enerjazzer
Дата: 30.05.07 08:43
Оценка:
Здравствуйте, LinU, Вы писали:

сишная строка должна оканчиваться нулевым символом, а у тебя его даже положить некуда
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.