Неопределенное поведение с использованием 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,

Другие вопросы по тегам