【问题标题】:Getting a core segmentation fault when trying to read a file from argv[] [closed]尝试从 argv [] 读取文件时出现核心分段错误 [关闭]
【发布时间】:2019-12-03 02:55:41
【问题描述】:

我在尝试从 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中的引号,这是为什么呢?

【问题讨论】:

  • 你是通过命令行传递的吗?你能发布命令行参数吗?
  • Debug 101:文件打开失败,所以首先要做的是printfopen前一行的文件名,看看是哪个文件失败了。

标签: c command-line-arguments main


【解决方案1】:

哎呀!我相信这条线

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]);

【讨论】:

    猜你喜欢
    • 2018-05-01
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2013-10-20
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多