2010-02-18 102 views
0

什么可能是它的问题?为什么我得到这段代码的分段错误?

#include <stdio.h> 
#include <string.h> 
#define SIZE 19 

void filePrint(char fileName[]); 

int main (void) 
{ 
    char fileRead[SIZE]; 

    filePrint(fileRead); 

    return 0; 
} 

void filePrint(char fileName[]) 
{ 
    FILE *inp; 
    int input_status = 0; 
    char readFile[SIZE]; 

    inp = fopen(fileName, "r"); 

    printf("\nEnter a file to print:\n"); 

    input_status = fscanf(inp, "%s", readFile); 

    while (input_status != EOF) 
    { 
     printf("%s\n", readFile); 
     input_status = fscanf(inp, "%s", readFile); 
    } 

    fclose(inp); 
} 
+2

如果您可以尽量减少发布相同问题的代码量,您将学到更多,并获得更好的答案。如果你只是抛弃所有的代码并且说“解决我的问题”,那么我们就不会动心地修复你的代码,但是如果你发布了一些小样本并且说“为什么这不符合我的预期?”我们通常很乐意向您解释。 – 2010-02-18 04:38:11

回答

3

除此之外,您从未真正指定要从中读取的文件?

+3

实际上,段错误发生在他试图从文件句柄中读取时,该文件句柄正在取消引用“NULL”指针。但是由于你陈述的原因,指针是'NULL'的,所以+1用于帮助而不是迂腐。 – 2010-02-18 04:35:07

+0

如果'fileRead'不包含任何NUL字符,那么段错误可能发生在'fopen()'返回之前。 – bk1e 2010-02-18 15:26:51

1

看起来像你从来没有把任何东西放到main中的fileRead []中,然后将它送到filePrint(),它将它提供给fopen()。即“未初始化的数据”

7

我认为你应该回去阅读File I/O的一章。

贯穿您在脑海中写下的代码并大声说出。

您试图打开一个文件,存储在fileName字符串中,但该字符串尚未初始化为任何有效的(对于fopen)。如果无法打开文件,fopen会返回一个NULL指针。你不能使用这个NULL指针来读取。 另外,如果您使用fscanf从您刚刚打开的文件中读取,则用户无法输入任何内容。

2

当您拨打fopen(fileName, "r");时,fileName尚未填入文件名。这是一个未初始化的数组。

+0

谢谢...我想通了 – Tomi 2010-02-18 04:56:15

+0

这不是正确的答案吗? – Craig 2010-02-18 06:47:50

1

如果您在fileRead []数组中也提到了文件名,则会出现分段错误。 由于您指定的数组大小为19.您应该在1024中指定fileRead []数组中的大数组大小。

1

您应该给函数的文件名。

您传递没有值的字符数组。那时候,数组的值是空的。在fopen函数中,您试图打开该文件。

所以fopen函数返回null值。如果fopen函数成功打开文件,它将返回正确的文件指针。否则它将返回null,该错误将被存储在errno中。

使用空指针无法读取。

相关问题