为什么我使用此代码会出现分段错误?

时间:2010-02-18 04:29:49

标签: c string

它有什么问题呢?

#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);
}

6 个答案:

答案 0 :(得分:7)

我认为你应该回过头来阅读关于File I/O的一章。

贯穿你在脑海中写下的代码,然后大声说出来。

您正在尝试打开存储在fileName字符串中的文件,但该字符串尚未初始化为任何有效的文件(对于fopen)。如果fopen无法打开文件,则返回NULL指针。您无法使用此NULL指针进行读取。 此外,如果您使用fscanf从刚刚打开的文件中读取,则用户无法输入任何内容。

答案 1 :(得分:3)

除此之外,您实际上从未指定要从中读取的文件?

答案 2 :(得分:2)

当您致电fopen(fileName, "r");时,fileName尚未填充文件名。这是一个未初始化的阵列。

答案 3 :(得分:1)

看起来你在把它送到filePrint()之前从未把任何东西放到main中的fileRead []中,这给了fopen()。即,“未初始化的数据”

答案 4 :(得分:1)

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

答案 5 :(得分:1)

您应该提供该功能的文件名。

您传递没有值的字符数组。所以那个时候,数组的值为null。在fopen函数中,您尝试打开该文件。

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

使用空指针无法读取。