【发布时间】:2016-10-06 08:39:18
【问题描述】:
我正在用 C 语言编写一个程序,旨在允许用户输入文件名,以便程序可以读取该文件的内容。输入的格式必须是“/i:”,也就是说我必须去掉前三个字符才能得到文件名。
我将文件名存储在具有预设长度的字符数组中(因为我不知道用户将输入多长的文件名)。我使用的命令是:
achBaseOutput[100];
FILE * InputFile
//Instruct users on input
fgets(achBaseOutput, 100, stdin);
//Strips first three characters, scoots file name to start at achBaseOutput[0]
InputFile = fopen(achBaseOutput, "r");
当我执行代码时,我得到一个错误框,上面写着:
Debug Assertion Failed!
File: fgets.c
Line 57
Expression: (str != NULL)
很遗憾,文件名的输入格式不由我决定,所以我无法更改输入的 /i: 格式。
如何格式化输入字符串以便 fopen 接受它作为有效参数?
【问题讨论】:
-
fgets()返回什么?失败的字符串的值是多少? -
该错误表明问题出在
fgets,特别是achBaseOutput可能为空。你能提供初始化它的代码吗? -
@AndrewHenle:如果他在
fgets中遇到断言错误,则该函数可能不会返回,但程序会终止。 -
请提供minimal reproducible example。所示的 sn-p 不应产生此行为(假设
achBaseOutput是char [100])。它也与您的问题无关。见How to Ask。 -
我一直在给 fgets() 本地文件的文件名(例如,在提示后我将输入“test”,然后按回车键。