[英]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.