我正在尝试编写一个简单的程序来从纯文本列表中列出的文件中读取数据,但是当我尝试在我的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");
}
尝试检查 fopen
的返回值。如果是NULL
呢?因为您的"文件名"很可能有尾随n
。
如果文件不存在,fopen 将返回 NULL。 在调用 fopen 后添加一些错误处理,您可能只是列表中有一个错误的条目。
可能发生的情况是 pgmFile 是 NULL,并且 fgets 尝试访问它,导致 seg 错误。