尝试从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中的引号,为什么?
答案 0 :(得分:3)
糟糕!我相信这条线
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]);