【发布时间】:2015-12-16 16:56:15
【问题描述】:
我知道以前有人问过这个问题,但以前的答案说你不能修改字符串文字,除非我误解我不是。我可以成功使用 strtok_r 直到输入的最后一行,然后我得到一个段错误。为什么会发生这种情况?这是我的代码的简化版本。从打印我知道它通过 get b 处理,但是有一个段错误?
#include <stdio.h>
#include <string.h> //strlen
#include <stdlib.h>
void handler(char * input){
char * end_str;
char * token =strtok_r(input, "\n", &end_str);
char * endd_str;
char * token2= strtok_r(token, " ", &endd_str);
while(token!=0){
printf("%s\n",token);
token=strtok_r(NULL,"\n",&end_str);
while(token2 !=0){
token2 =strtok_r(NULL," ",&endd_str);
printf("%s\n",token2);}
}
}
int main(int argc , char *argv[])
{
char test[100]="set a,10.5\nset b,11.5\nget b\nadd e,a,b\nsub g,a,b";
handler(test);
return 0;
}
【问题讨论】:
-
提供的代码是否也失败了?如果没有,您没有提供足够的数据让任何人告诉您失败的原因。见stackoverflow.com/help/mcve
-
无法使用您提供的示例代码重新创建 seg 错误。您确定是
strtok_r导致了段错误,而不是其他原因。 -
为什么你认为程序执行会产生一些有意义的东西?您可以查看生成的二进制代码以了解您的情况。
标签: c