Неопределенное поведение с использованием strtok
Я использую strtok() токенайзер строк
вход как сказать
"a,b,c,d|12,34,56,78"
я делаю
char * cols;
char * vals;
$char col_val_temp[1024] = {0};
$char col_val[1024] = {0};
cols = strtok(input,"|");
vals = strtok('\0',"|");
// now vals will have "12,34,56,78"
strcpy(col_val_temp,vals);
strcpy(col_val,col_val_temp);
и в более поздней части кода я снова использую strtok
на vals
но я вижу в отладчике, что вдруг из ниоткуда значение col_val
становится нулевым, пока есть данные в col_val_temp
, Я не сделал никакой операции на col_val
Строка, поэтому я не понимаю, почему данные там теряются.
Может кто-нибудь, пожалуйста, объясните, почему у меня такое поведение и как это преодолеть. Я застрял из-за этого.
Спасибо!!!
1 ответ
Решение
В вашем коде есть (как минимум) одна проблема переполнения буфера.
Вы делаете strcpy
в seqno
, seqno
объявляется только один символ длиной, поэтому терминатор строки, вероятно, перезапишет значение указателя cols
,