【发布时间】:2013-12-08 21:58:36
【问题描述】:
我正在尝试使用fgets 从标准输入获取一行用户输入,使用strtok 对其进行标记化,然后打印每个标记以确保它被正确标记化。我的代码如下:
char buffer[256];
char *token;`
fgets(buffer, 256, stdin);
token=strtok(buffer," \n\t()<>|&;");
while(token!=NULL) {
printf("%s",token);
count++;
token = strtok(NULL," \n\t()<>|&;");
}
但是,每当我调用 printf 时,我都会遇到分段错误,我似乎无法弄清楚究竟是什么原因。
【问题讨论】:
-
我刚刚测试过它,它工作正常。你确定你没有从程序的不同部分得到段错误吗?
-
仅使用此代码的短程序似乎可以正常工作,而不会出现分段错误。能发个失败的代码sn-p吗?
-
@MartinMajer 将上面的代码放在 main 函数中会在我运行它时导致段错误,无论我输入什么。添加打印以测试故障发生的位置,它似乎在打印令牌的 printf 上,因为在该点之前发生的打印将执行,但在后续打印之前我得到了一个段错误。
-
@user3035026 我相信你,但除非我们能够重现它,否则我们将无法诊断问题。几乎可以肯定,您粘贴的代码不是完全正在运行的代码 - 例如,额外的 ` ` ` 字符和未声明的
count变量 - 所以看到complete, compilable example 将有助于理解您的程序失败的原因。 -
@qwrrty 看起来我应该像你说的那样粘贴整个程序,这个问题最终只是一个被遗忘的
#include
标签: c segmentation-fault printf output strtok