strtok()返回奇怪的值和段错误

时间:2015-04-04 15:01:31

标签: c strtok

我正在使用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()不仅没有得到正确的值,它似乎以一种非常奇怪的顺序经历了文本。关于为什么会这样的任何想法?非常感谢你提前!

1 个答案:

答案 0 :(得分:2)

所有%s中的printf都需要char*。您传递的&text&token都是char**个。这将调用C11标准中所述的未定义行为:

  

7.21.6.1 fprintf函数

     

[...]

     
      
  1. 如果转换规范无效,则行为未定义。 282 如果任何参数不是相应转换规范的正确类型,则行为未定义。
  2.   

要解决此问题,请从所有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);