程序将文件分开并逐个打印,但是当我编译并运行它时,它表示分段错误。
main
的一部分:
char * w;
int Counter = 0;
while ( (w = nextword(fd)) != NULL) {
printf("%d: %s\n", Counter, w);
Counter++;
}
printf("words total = %d\n", Counter);
功能nextword
:
char * nextword(FILE * fd) {
int c;
int i;
c = fgetc(fd);
while (c != -1 ) {
while ( (c != ' ') && ( c != '\n')) {
word[wordLength] = c;
wordLength++;
}
return word;
wordLength = 0;
}
答案 0 :(得分:1)
这就是导致问题的原因:
return word;
wordLength = 0;
一旦你回来,就永远不会达到wordLength = 0;
陈述。
将其移至功能顶部以修复您的实施。
更好的实现将使用临时缓冲区,而不是全局缓冲区。例如,您可以这样做:
size_t nextword(FILE * fd, char buf[], size_t max_len) {
size_t len = 0;
... // Read data into buf up to max_len-1.
// Then add null terminator, and return length.
// When you return length of zero, it means the end of input
return len;
}
来电者会像这样调用你的函数:
char w[100];
while ( nextword(fd, w, 100) != 0) {
printf("%d: %s\n", Counter, w);
Counter++;
}
答案 1 :(得分:0)
尝试放
return word;
之后
wordLength=0;
我的猜测是,你永远不会重置你的wordLength,你最终得到wordLenght非常高。
另请注意,使用全局缓冲区/计数器不是一个好习惯。