我在尝试从 argv[] 读取文件时遇到核心分段错误。我已经创建了文件,并且非常确定我正在尝试访问正确的内存地址。但是,当尝试打开文件时,我收到核心转储。
这是相关的代码-
for (int x=1;x<argc;x++){
int buffsize=2056;
char buff[buffsize];
FILE* thefile;
thefile=fopen("argv[x]","r");
if (thefile == NULL) {
fprintf(stderr, "%s cannot open file '%s'n", argv[0], argv[1]);
return 2;
}
我传入的命令行参数是
./words testfile.txt
./words是编译的代码。
我实际上找到了解决方案,似乎是 fopen 中 argv 中的引号,这是为什么?
哎呀!我相信这条线
thefile=fopen("argv[x]","r");
应该是:
thefile=fopen(argv[x],"r");
这是因为"argv[x]"
不是代码,而是一个字符串。什么?这是文件的路径吗?它不会编译为代码。它不是指argv
中的参数之一。
您可能还希望日志消息使用该文件名。请注意argv[x]
:
fprintf(stderr, "%s cannot open file '%s'n", argv[0], argv[x]);