我正在使用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}}字符串进行任何操作,所以我不明白为什么那里的数据会丢失。
有人可以解释为什么我会得到这种行为以及如何克服这个问题。 我因此而陷入困境。
谢谢!!!
答案 0 :(得分:2)
代码中存在(至少)一个缓冲区溢出问题。
您执行strcpy
到seqno
。 seqno
只声明一个字符长,因此字符串终止符可能会覆盖cols
的指针值。