c - 使用 strtok 的未定义行为

标签 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);

在代码的后面部分我再次使用strtokvals但是,我在调试器中看到 col_val 的值突然不存在了。当col_val_temp中存在数据时变为空。我没有对col_val进行任何操作string,所以我不明白为什么里面的数据会丢失。

有人可以解释一下我为什么会出现这种行为以及如何克服这种情况。 我因此陷入困境。

谢谢!!!

最佳答案

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

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

关于c - 使用 strtok 的未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14157390/

相关文章:

c - strtok 添加额外的行?

来自多个函数的全局字符串的 C strtok

c - 在 C 中使用 Glob() 列出目录中的文件

c - 为什么 printf ("%.1f", 1) 输出 0.0

c - strtok 指针采用分隔符值

c - 替换 C 中的单词

c - strtok() 和空字段

c - 文件修改时间作为 C 中的整数

c - 在 LLVM pass 中获取变量名

c - 从将用于创建 DLL 的函数返回字符串