2011-03-01 107 views
0
char fname[256]; 
printf("Enter file name\n"); 
scanf("%123s",fname); 
strcat(fname,".txt"); 

FILE *inputf; 
inputf=fopen(fname,"w"); 

if (inputf!=NULL) 
    printf("found"); 
else 
    printf("not found"); 

刈問題是,不管是什麼文件名,我輸入我得到一個非空 任何pointer.can一個解釋,爲什麼?傳遞文件名作爲參數

+0

什麼問題? – Gorgen 2011-03-01 06:18:17

+0

你在什麼環境下運行這段代碼?你自己的電腦?共享終端,可能是學校電腦? Ssh訪問別的地方?如果你正在運行linux,「ls -l」的輸出是什麼?因爲它似乎缺少寫入文件系統的權限。 – 2011-03-01 06:42:11

+0

你的代碼在我的系統上編譯得很好。如果不以「w」參數退出,它會創建文件。你必須檢查@junjanes建議的內容。 – Mahesh 2011-03-01 06:43:51

回答

3

fopen(文件名,「w」)將創建一個新文件。因此,如果您輸入的是合法文件名並具有適當的文件系統權限,則應該成功。

如果你想打開現有的文件,使用方法:

fopen(filename, "r") 

(請注意 「R」 模式,而不是 「W」。)

+0

但新文件是不是在任何地方找到? – 2011-03-01 06:22:24

+0

@samir - 那麼參數應該是「r +」。這指定了一個已經存在的文件來讀取和寫入。該文件必須存在。 – Mahesh 2011-03-01 06:27:04

+0

不,我的意思是,如果我想在硬盤上創建一個全新的文本文件? – 2011-03-01 06:29:32

0

不是這個:

char fname[256]; 
printf("Enter file name\n"); 
scanf("%123s",fname); 
strcat(fname,".txt"); F 
FILE *inputf; inputf=fopen(fname,"w"); // <--!!! 
if (inputf!=NULL) printf("found"); 
else printf("not found");

but this instead:

char fname[256]; FILE *inputf;

inputf=fopen(fname,"w");
printf("Enter file name\n");

// you know that you can't ever, EVER use scanf() so // remove this time bomb and use something else scanf("%123s",fname);

strcat(fname,".txt"); inputf=fopen(fname,"w"); if (inputf!=NULL) { printf("found"); } else { printf("not found"); }

現在,什麼指針不是NULL?你不能像編譯代碼那樣編譯代碼,那麼你怎麼知道什麼是或不是NULL?

--pete

+0

如果未找到文件,inputf應爲空系統..所以它不是NULL即使我輸入一個無效的文件名。 – 2011-03-01 06:33:19

+0

,你能告訴我比scanf更好的選擇嗎? – 2011-03-01 06:33:56

+0

@Pete:我一定會錯過一些東西。爲什麼他的原代碼不能編譯? – dappawit 2011-03-01 06:36:22