使用动态字符串在C中文件I / O.

时间:2014-05-21 16:48:07

标签: c string io

我正在尝试编写一个执行以下操作的简单程序:

  • 选择文件
  • 选择如何处理文件(fopen模式:r,w,a,r + ...)
  • 写入文件

到目前为止,这是我的代码:

//Gets future file content
printf("Write content:\n");
char content[100];
fgets(content, 100, stdin);

//Selects file
printf("Select output file: ");
char file[30];
fgets(file, 30, stdin);

//Selects mode
printf("Select mode: ");
char mode[3];
fgets(mode, 3, stdin);

    FILE *fp;
    fp = fopen(file, mode);

    if (fp == 0) {
       printf("File NOT opened\n");
    }

我想要变量" file"用作文件的字符串/路径,同样适用于"模式"变量。 当我运行程序时,我得到文件没有打开,这意味着fp是一个空指针。

PS:这不是整个代码,但那是什么打破了它

提前致谢

2 个答案:

答案 0 :(得分:2)

添加此行

fprintf(stderr, "file='%s'\n", file);

阅读file之后,如果通过点击 Enter 终止输入,则会读取换行符。

来自我man fgets()斜体):

  

fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读数在EOF或换行符后停止。 如果读取换行符,则将其存储到          缓冲区。终止空字节('\ 0')存储在缓冲区中的最后一个字符之后。


根据 Chris Dodd 的评论如下:同样适用于读入mode的字符串。

答案 1 :(得分:1)

您需要检查文件名和模式的问题。 首先,fgets()会将换行符存储到缓冲区中,这可以防止fopen()执行您期望的操作。 打印出你想要打开的内容:

printf("opening: '%s' with mode '%s'\n", file, mode);

其次,您应该检查fopen设置的错误代码:

perror("File NOT Opened");

这样你至少可以看到错误打开文件的内容。