int main(){
char* pstrs = NULL;
gets(pstrs);
FILE* ptest = NULL;
if((ptest = fopen(ptest,"w")) == NULL){
printf("打開檔案失敗\n");
perror("");
}
fputs(pstrs,ptest);
fclose(ptest);
ptest = NULL;
printf("-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-\n");
if((ptest = fopen(ptest,"r")) == NULL){
printf("打開檔案失敗\n");
}
fgets(pstrs,(sizeof(ptest)-1),ptest);
puts(pstrs);
printf("File :%s\n", __FILE__ );
system("pause");
return 0;
}
檔案新建失敗,是為什么?我看編譯器報錯說是語法錯誤。
小白求指點。
uj5u.com熱心網友回復:
頭檔案沒包含?你一定要學會看編譯報錯說明。
uj5u.com熱心網友回復:
首先把char *pstrs = NULL
改成
char pstrs[256];
否則gets(pstrs)的引數是空指標,會發生非法記憶體操作錯誤
其次把
if((ptest=fopen(ptest, “w”))!=NULL)
改成
if((ptest=fopen(”檔案路徑字串”, “w”))!=NULL)
否則fopen的引數同樣是空指標,肯定找不到路徑,就會打開檔案失敗
uj5u.com熱心網友回復:
char* pstrs = NULL;
gets(pstrs);
還沒到打開檔案的那步就會段錯誤了。因為pstrs指向了NULL,對于指向NULL的理解還是有問題的。NULL的位置是不可讀不可寫的,那么gets是往pstrs里寫,所以一定會出現段錯誤。
所以,不是檔案打開的問題,而是指標的使用錯誤。
uj5u.com熱心網友回復:
編譯報錯invalid arguement,我理解成語法錯誤,不知道對不對
uj5u.com熱心網友回復:
那我初始化指標前,是不是應該定義NULL為0?uj5u.com熱心網友回復:
那我初始化指標前,是不是應該定義NULL為0?
uj5u.com熱心網友回復:
不需要。NULL是(void *)0.
uj5u.com熱心網友回復:
頭檔案沒包含?
你一定要學會看編譯報錯說明。
編譯報錯invalid arguement,我理解成語法錯誤,不知道對不對
============所謂 invalid arguement,翻譯過來是什么,非法的引數,
那就是引數的問題,編譯器一般還會告訴你是第幾行出這樣的問題,你沒仔細去看罷了
你的代碼中充斥著這類問題。
char* pstrs = NULL;
gets(pstrs);//gets的原型是什么?===>char *gets(char *s);,//這個引數型別對了,可是你的ptrs是NULL,空指標,你沒有記憶體來容納gets取出來的字符;,你可以把ptrs定義成陣列,比如char ptrs[1024];
FILE* ptest = NULL;
if((ptest = fopen(ptest,"w")) == NULL){//ptest是檔案指標,fopen是打開檔案,不是打開檔案指標
//函式原型FILE *fopen(const char *path, const char *mode); ,第一個引數是char *, 你卻傳給他FILE *,所以錯誤了
printf("打開檔案失敗\n");
perror("");
再解釋下去有些繁瑣,,好多東西需要解釋,比如檔案操作的這些庫函式,
你應該怎么去理解他們,他們為你提供什么?你要告訴他們一些基本資訊,以便讓這些函式完成你交代下去的任務。。。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/82094.html
標籤:C語言
上一篇:c++問題 緊急
下一篇:萌新想問這是遞回嘛?看不懂,害。
