【发布时间】:2013-03-23 03:38:18
【问题描述】:
大家好,我的 strtok 出现了段错误,需要一点帮助!
char s[1024];
char *token[2];
while(fgets(s, sizeof(s), fp) != NULL) // Read line from file fp until end
{
token[0] = strtok(s, "\t\n");
token[1] = strtok(NULL, "\t\n");
token[2] = strtok(NULL, "\t\n");
printf("%d:%s:%d", atoi(token[0]), token[1], atoi(token[2]));
}
但是在循环的第一次逾越节后我得到了一个段错误。 输入文件如下所示:
102910319 code mark
.
.
.
104981851 code mark
但是 while 循环只正确打印第一行,而在第二行出现段错误。
有什么想法吗?
谢谢。
【问题讨论】:
-
我的第一个猜测:您声明了
token[2],但您访问了 3 个元素 -
也可以,修复数组声明后可能会遇到数据问题: - 列之间的白色字符不是\t。
-
已修复,但仍出现 seg 错误! @jimmcnamara 不,它们都是 \t (标签)。
-
对于
token[1]和token[2],我们需要\t\n还是只需要\t作为分隔符? -
您的代码将在非 \t 空白字符上出现段错误。因为您将提前返回 NULL。例如,token[2] 可以为 NULL。检查命令的输出:od -c inputfile |更多。
标签: c linux segmentation-fault strtok