int i = 0;
while(fgets(lineStr, sizeof(lineStr), pFile)!=NULL){
puts(lineStr);
pch = strtok (lineStr, delim);
while(pch != NULL){
printf("%s\n",pch);
pch = strtok(NULL,delim);
}
}
概述:我正在尝试编写一个grep的迷你版本(即在文本文件中查找单词出现的次数)。整个代码请参见http://pastebin.com/VzTJkLK3 问题:我正在尝试使用strtok来将表示文本行的字符数组进行分词。我注意到,在使用gdb时,会出现段错误,如下所示:
欢迎提供任何提示或更多文档链接。Program received signal SIGSEGV, Segmentation fault. __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:31 31 ../sysdeps/x86_64/multiarch/../strlen.S: No such file or directory.
附注:有人告诉我,使用strtok不是“好”的编程实践 - 我是C语言的新手。你能推荐一些替代方法吗?
strtok_r
,它使用一个额外的参数而不是“全局”变量,但它不在C标准中(我认为它包含在POSIX标准中,所以只要你在nx上使用它就没有问题)。 - Medinocargc
之前就打开了argv[2]
中的文件... - Medinoc<string.h>
头文件,这是strtok()
(以及strlen()
)声明的位置。如果此代码与您的相同,则需要#include <string.h>
,如果它可以正常工作,我会在您报告后解释原因。另外,请选择一种语言。这看起来根本不像C++代码,如果不打算使用C++,则应该删除该语言标签。 - WhozCraig