【发布时间】:2014-11-17 20:44:42
【问题描述】:
我正在尝试使用 fopen 在 C 中打开一个文件,但我遇到了一个相当奇怪的问题。如果我这样做,它会非常好:
ptr_file = fopen("file.txt", "r");
但是如果我尝试这个它不起作用
char file_name[20];
printf("Enter file name");
scanf("%s",file_name);
ptr_file = fopen(file_name, "r");
file_name 本身的值存储在一个简单的字符数组中,如果输入相同的文件名,我真的看不出第一个和第二个实现有什么区别。我觉得我在这里遗漏了一些明显的东西。
【问题讨论】:
-
使用 fgets 而不是 scanf 进行输入,然后删除最后一个字符 \n。使用 scanf 读取字符串很痛苦,有缓冲区溢出的风险。用 fgets 你告诉你的缓冲区有多大,在那个大小之后它会停止读取
-
“不起作用”是什么意思?您是否尝试打印出
file_name以查看其中包含的内容? -
@JimRhodes 的意思是 -- printf("%s\n", file_name);例如,您可能在 file_name 字符串中有一个尾随 \n 字符。
-
试试
perror("fopen"); -
@jim(两者之一):最好是
printf ("[%s]\n", file_name);,因此任何尾随空格或返回都是可见的。 (.. 可能不是\r,具体取决于终端类型..)。