簡體   English   中英

為什么我的這段代碼出現分段錯誤?

[英]Why am I getting a segmentation fault with this code?

可能是什么問題呢?

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

我認為您應該回過頭來閱讀有關File I / O的一章。

遍歷您在腦海中編寫的代碼,並大聲疾呼。

您正在嘗試打開一個存儲在fileName字符串中的文件,但是該字符串尚未初始化為有效的任何內容(對於fopen)。 如果fopen無法打開文件,則返回NULL指針。 您不能使用此NULL指針進行讀取。 另外,如果您使用fscanf從剛剛打開的文件中讀取內容,則用戶無法輸入任何內容。

除其他外,您從未真正指定要讀取的文件嗎?

當您調用fopen(fileName, "r"); fileName尚未填充文件名。 這是一個未初始化的數組。

看起來您從未將任何東西放入main中的fileRead []中,然后再將其饋送到filePrint(),后者將其交給fopen()。 即“未初始化的數據”

如果還在fileRead []數組中提到了文件名,則會出現分段錯誤。 因為您指定的數組大小為19,所以應在fileRead []數組中指定較大的數組大小,例如1024。

您應該提供函數的文件名。

您傳遞沒有值的字符數組。 到那時,數組的值為null。 在fopen函數中,嘗試打開文件。

因此,fopen函數返回空值。 如果fopen函數成功打開文件,它將返回正確的文件指針。 否則它將返回null,該錯誤將存儲在errno中。

使用空指針無法讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM