字计数器中的分段错误

时间:2015-02-05 17:03:09

标签: c segmentation-fault

程序将文件分开并逐个打印,但是当我编译并运行它时,它表示分段错误。

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;
}

2 个答案:

答案 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非常高。

另请注意,使用全局缓冲区/计数器不是一个好习惯。