当我使用char数组作为文件名时,fopen总是返回NULL但是如果我使用像" file.txt"这样的名字,一切正常。

时间:2014-03-12 14:55:43

标签: c file

int save(int *file,int K)
{

    int i;
    char *name;
    FILE *fp;

    name=(char *)malloc(256);


    puts("type file name\n");
    getchar();
    fgets(name,256,stdin);



    if((fp=fopen(name,"w"))==NULL)
    {
        puts("file can't be opened\n");
        return 0;
    } 

    fprintf(fp,"%d\n",K);    

    for(i=0; i<K; i++)
    {
        fprintf(fp,"%d\n",*(file+i));
    }


    fclose(fp);

    return 1;

}

为什么这不起作用但是当我使用fopen("text.txt","w")时一切正常?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

这是因为fgets将换行符'\n'附加到字符串中。你需要先关闭它。

if (isspace(name[strlen(name)-1]))
   name[strlen(name)-1] = '\0';

答案 1 :(得分:1)

打印name并检查它是否真的相同。

我的猜测:它包含一个换行符。

如果是这种情况,您可以将其替换为\0

来删除它
name[strlen(name)-1]='\0';