我正在使用strtok()
从文件中获取的数据中提取字符。
这是我的代码:
fgets(text, 12, myFile);
printf ("text is: %s \n", &text);
char *token;
token = strtok(text, " ");
printf("first token is: %s \n", &token);
printf ("text is: %s \n", &text);
token = strtok(NULL, " ");
printf("second token is: %s \n", &token);
这给出了如下输出:
text is: 4 3 //this is the expected and correct value of "text"
first token is: ڱ[?
text is: 4 // I was expecting this to be 3 after getting the first token...
second token is: "ڱ[?
Segmentation fault: 11
正如你所看到的,strtok()
不仅没有得到正确的值,它似乎以一种非常奇怪的顺序经历了文本。关于为什么会这样的任何想法?非常感谢你提前!
答案 0 :(得分:2)
所有%s
中的printf
都需要char*
。您传递的&text
和&token
都是char**
个。这将调用C11标准中所述的未定义行为:
7.21.6.1 fprintf函数
[...]
- 如果转换规范无效,则行为未定义。 282 如果任何参数不是相应转换规范的正确类型,则行为未定义。
醇>
要解决此问题,请从所有printf
中删除&符号,即替换以下所有语句:
printf ("text is: %s \n", &text);
printf("first token is: %s \n", &token);
printf ("text is: %s \n", &text);
printf("second token is: %s \n", &token);
与
printf ("text is: %s \n", text);
printf("first token is: %s \n", token);
printf ("text is: %s \n", text);
printf("second token is: %s \n", token);