【发布时间】:2021-12-29 08:39:43
【问题描述】:
我正在从一本书中学习 C 语言。 我已经读到了书中关于文件和命令行参数的部分,但现在我被这段代码卡住了:
#include <stdio.h>
int main (int argc,char **argv)
{
FILE *f=fopen(argv[1],"r");
int c;
do
{
c=fgetc(f);
printf("%c",c);
}
while(!feof(f));
}
当我运行它时(参数是代码自己的用于测试的文件名),出现error message:
0x0000000000401474 处的指令引用了 0x0000000000000006 处的内存。无法读取内存。单击确定以终止程序。点击CANCEL调试程序。
这个错误是什么意思,如何解决?
【问题讨论】:
-
在调用
fopen后始终检查f。在访问argv[1]之前,请务必检查argc >= 2。请注意,“参数是代码自己的文件名” 无论如何都是argv[0]。 -
如果文件是二进制文件(不是文本文件),那么
printf("%d ",c);会更有用。 -
我为误解道歉,@WeatherVane,我所说的“代码自己的文件名”是指未编译的 C 代码保存在一个名为“tutorial.c”的文件中,我编译了代码并使用
fileopen tutorial.c运行可执行文件 -
无法重现,但我作为参数提供的文件确实存在于默认文件夹中。检查
argc和检查f。 -
非常感谢您的 cmets @Weather Vane,我的代码现在可以工作了。
标签: c file command-line memory-address fault