我正在使用 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
进行任何操作string,所以我不明白为什么里面的数据会丢失。
有人可以解释一下我为什么会出现这种行为以及如何克服这种情况。 我因此陷入困境。
谢谢!!!
最佳答案
您的代码中(至少)存在一个缓冲区溢出问题。
您对seqno
执行strcpy
。 seqno
声明的长度只有一个字符,因此字符串终止符可能会覆盖 cols
的指针值。
关于c - 使用 strtok 的未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14157390/