2

我正在尝试编写一个简单的程序来从纯文本列表中列出的文件中读取数据,但是当我尝试在我的 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");
}  
4

2 回答 2

3

尝试检查fopen. 如果是NULL呢?因为您的“文件名”很可能有尾随\n.

于 2012-09-26T20:21:17.007 回答
1

如果文件不存在, fopen 将返回 NULL。在调用 fopen 之后添加一些错误处理,您的列表中可能只有一个错误的条目。

可能发生的情况是 pgmFile 为 NULL,并且 fgets 尝试访问它,从而导致 seg 错误。

于 2012-09-26T20:22:07.003 回答