使用strtok的未定义行为

时间:2013-01-04 12:40:19

标签: c 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}}字符串进行任何操作,所以我不明白为什么那里的数据会丢失。

有人可以解释为什么我会得到这种行为以及如何克服这个问题。 我因此而陷入困境。

谢谢!!!

1 个答案:

答案 0 :(得分:2)

代码中存在(至少)一个缓冲区溢出问题。

您执行strcpyseqnoseqno只声明一个字符长,因此字符串终止符可能会覆盖cols的指针值。