我正在尝试编写一个执行以下操作的简单程序:
到目前为止,这是我的代码:
//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:这不是整个代码,但那是什么打破了它提前致谢
答案 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");
这样你至少可以看到错误打开文件的内容。