调用fgets时出现分段错误

时间:2012-09-26 20:19:18

标签: c segmentation-fault

我正在尝试编写一个简单的程序来读取纯文本列表中列出的文件中的数据,但是当我尝试在我的processFile函数中调用fgets()时,我一直遇到分段错误。

如果我只是调用processFile(“file.txt”)这样的东西就不会发生,但是当我尝试通过我的processList函数调用processFile时会发生这种情况。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void processFile (char *file)
{
    char line[256];
    FILE* pgmFile;
    pgmFile = fopen(file, "r");
    fgets(line, 200, pgmFile); // Seg fault here
    fclose(pgmFile);
}    

// Runs processFile on every file listed in list
void processList (char *list)
{
    FILE *pgmList;
    pgmList = fopen(list, "r");

    char line[256];

    while (fgets(line, 255, pgmList) != NULL) {
        processFile(line);
    }
    fclose(pgmList);
}      

int main ()
{
    processList("downgesture_test1.list");
}  

2 个答案:

答案 0 :(得分:3)

尝试检查fopen的返回值。如果它是NULL怎么办?因为您的“文件名”可能会尾随\n

答案 1 :(得分:1)

如果文件不存在,

fopen将返回NULL。在调用fopen之后添加一些错误处理,你的列表中可能只有一个错误的条目。

可能发生的是pgmFile为NULL,fgets尝试访问它,导致seg错误。

相关问题