2011-03-01 106 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