2012-09-26 179 views
2

我试图编写一个简单的程序来读取纯文本列表中列出的文件中的数据,但是当我尝试在我的processFile函数中调用fgets()时,我仍然遇到了分段错误。调用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"); 
} 
+5

成功完成fopen()后,fdopen()和freopen()返回一个FILE指针。否则,返回NULL并将errno设置为指示错误。请检查fopen()返回的内容。生活并不总是完美的。文件可能无法访问。 – Asblarf

+0

伙计 - 错误检查!确保“fopen()函数”成功尝试从中读取之前;) – paulsm4

回答

3

尝试检查的fopen返回值。如果是NULL?因为您的“文件名”可能跟踪了\n

+0

这是确切的问题!谢谢您的帮助! –

+0

不客气。 –

+0

如果你相信你已经有了这样的保障,考虑检查您的测试确实是'pgmFile == NULL'和NOT'pgmFile = NULL' - 可以节约你的时间相当。 –

1

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

可能发生的情况是,pgmFile为NULL,fgets尝试访问它,导致seg故障。