下面是一個簡單的代碼,我希望SIZE.txt
被創建,然後被關閉。它編譯沒有錯誤,也沒有警告,但文件不會被創建。但是,執行代碼時會引發分段錯誤。簡單的文本文件不會被創建[C,GCC]
感謝您提前給予的幫助。
#include "stdio.h"
void main() {
FILE *fp;
fp = fopen("SIZE.txt", "r+");
fclose(fp);
return;
}
下面是一個簡單的代碼,我希望SIZE.txt
被創建,然後被關閉。它編譯沒有錯誤,也沒有警告,但文件不會被創建。但是,執行代碼時會引發分段錯誤。簡單的文本文件不會被創建[C,GCC]
感謝您提前給予的幫助。
#include "stdio.h"
void main() {
FILE *fp;
fp = fopen("SIZE.txt", "r+");
fclose(fp);
return;
}
的主要原因爲:
#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;
您可能想要將失敗的主要原因(*模式*)指定爲「」r +「',這將只打開*現有*文件,而不是創建新文件。只有在指定''w +「',''a」'或''a +「'作爲模式時纔會創建一個文件 - 那麼您的答案將會保證無效。歡迎來到S.O. –
是的,你是對的,我應該指定我寫的內容,下次我不會犯這個錯誤,我是新的堆棧,並感謝通知/關注 – Mike01
好吧,我會保持我的目的 - 在你的目標上可以免費抄襲我的評論,將解釋添加到您的答案中,這將是一個很好的教學案例,值得讚揚。 –
變化:
if ((fp = fopen("file.txt", "r")) == NULL) {
// Handle error...
}
將''stdio.h「'更改爲'
SIZE.txt的路徑是否正確? – Nunchy
@MetinOktayYılmaz是的文件仍然缺失,你缺乏閱讀評論的能力,更不用說手冊頁了。那麼繼續下去,還是需要鏈接FFS? –
在嘗試關閉它之前,您必須檢查結果'fp!= NULL'。該文件可能不存在於您認爲正在運行的路徑上。 –
手冊頁上顯示*「r +」用於閱讀和書寫。該文件必須存在。*因此,當您說文件無法創建時:否,它不能。 –
我的建議是'man fopen' – KevinDTimm