2016-08-02 84 views
-2

下面是一個簡單的代碼,我希望SIZE.txt被創建,然後被關閉。它編譯沒有錯誤,也沒有警告,但文件不會被創建。但是,執行代碼時會引發分段錯誤。簡單的文本文件不會被創建[C,GCC]

感謝您提前給予的幫助。

#include "stdio.h" 

void main() { 
    FILE *fp; 
    fp = fopen("SIZE.txt", "r+"); 
    fclose(fp); 
    return; 
} 
+2

在嘗試關閉它之前,您必須檢查結果'fp!= NULL'。該文件可能不存在於您認爲正在運行的路徑上。 –

+5

手冊頁上顯示*「r +」用於閱讀和書寫。該文件必須存在。*因此,當您說文件無法創建時:否,它不能。 –

+0

我的建議是'man fopen' – KevinDTimm

回答

1

的主要原因爲:

#include "stdio.h" 

#include <stdio.h> 

此外,檢查一個NULL指針由fopen()函數返回失敗是由於fi的規範樂模式作爲"r+"將只開放現有文件,不創建新文件。僅在"w+", "a""a+"被指定爲文件模式時才創建文件。

檢查這一點,如果文件存在這將是顯示文件已經存在,但如果文件不存在,它會創建它,取決於你有什麼要做的事情,在AB +你可以改變爲w

FILE *fp; 
fp = fopen("SIZE.txt", "r"); 
if(fp==NULL){ 
    fp=fopen("SIZE.txt", "ab+"); 
    printf("File was created\n"); 
} 
else{ 
    printf("File already exists\n"); 
} 
fclose(fp); 
return 0; 
+0

您可能想要將失敗的主要原因(*模式*)指定爲「」r +「',這將只打開*現有*文件,而不是創建新文件。只有在指定''w +「',''a」'或''a +「'作爲模式時纔會創建一個文件 - 那麼您的答案將會保證無效。歡迎來到S.O. –

+0

是的,你是對的,我應該指定我寫的內容,下次我不會犯這個錯誤,我是新的堆棧,並感謝通知/關注 – Mike01

+0

好吧,我會保持我的目的 - 在你的目標上可以免費抄襲我的評論,將解釋添加到您的答案中,這將是一個很好的教學案例,值得讚揚。 –

1

變化:

if ((fp = fopen("file.txt", "r")) == NULL) { 
    // Handle error... 
} 
+0

將''stdio.h「'更改爲''。它返回NULL,'SIZE.txt'仍然缺失。 –

+0

SIZE.txt的路徑是否正確? – Nunchy

+1

@MetinOktayYılmaz是的文件仍然缺失,你缺乏閱讀評論的能力,更不用說手冊頁了。那麼繼續下去,還是需要鏈接FFS? –