[英]I/O System Calls
我正在本科課程中學習系統調用作為實驗室的一部分。 在我的OS實驗室中,即使我無法在程序代碼中找到任何錯誤,也開始反復出現此錯誤。
bharaths-mbp:sem4 bharathdustan$ vim readFromFile.c
bharaths-mbp:sem4 bharathdustan$ gcc readFromFile.c
bharaths-mbp:sem4 bharathdustan$ ./a.out
Segmentation fault: 11
我收到此錯誤的代碼是:
#include<stdio.h>
int main()
{
char str[100];
FILE *fp;
fp=fopen("file1.dat","r");
while(!feof(fp))
{
fscanf(fp,"%s",str);
printf(" %s ",str);
}
fclose(fp);
}
誰能幫助我在上述程序中找到錯誤?
1)檢查fopen()
的結果
fp = fopen("file1.dat", "r");
if (fp == NULL) Handle_FileOpenError();
2)讀取后需要檢查fscanf()
或feof()
的結果。 feof()
直到沒有結果的讀取之后才返回true。 原始代碼檢查feof()
為時已晚。
while(fscanf(fp,"%s",str) != EOF) {
printf(" %s ",str);
}
3)如@Rohan所建議,請確保您沒有溢出str
while(fscanf(fp,"%99s",str) != EOF) {
printf(" %s ",str);
}
您的代碼在語義上沒有錯,只是安全性或靈活性不高。 如果找不到該文件(確保文件位於同一目錄中),則可能會出現段錯誤,並且讀入的字符串大於分配的內存,則可能會出現段錯誤。 如果這兩個方面都涵蓋了,那么我看不出它應該進行段錯誤的任何原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.