簡體   English   中英

I / O系統調用

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

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