【发布时间】:2014-05-21 16:48:07
【问题描述】:
我正在尝试编写一个执行以下操作的简单程序:
- 选择文件
- 选择如何处理文件(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”用作文件的字符串/路径,“mode”变量也是如此。 当我运行程序时,我发现文件没有打开,这意味着 fp 是一个空指针。
PS:这不是完整的代码,但这就是破坏它的原因
提前致谢
【问题讨论】:
-
如果文件不存在或您没有权限,那么您可能会通过我认为的 NULL 结果以外的结果收到某种类型的通知。尝试检查文件是否为 NULL?
-
使用 w 或 w+ 模式会创建一个文件。我检查了它仍然返回相同的错误。不过还是谢谢
-
fgets()最可能读取到file的尾随换行符。 -
你认为,当我将文件初始化为 char 文件 [30]。未使用的元素会保存垃圾值吗? (因为我可能不会使用 29 位)
-
不,短字符串后未使用的元素不是问题。
fgets写入必要的终止 NUL -fopen将看不到之后的任何内容。问题是输入中的换行符。