【问题标题】:Reading a file using argc and argv使用 argc 和 argv 读取文件
【发布时间】:2015-10-22 17:47:18
【问题描述】:

我正在尝试(如标题所示)使用 argc 和 argv 从文件读取到 main,从命令行获取文件名并将其通过 main 传递到打开、读取和写入它的 void 函数中。但是我得到Cannot open file...Segmentation fault

void file_pass (char * argv[])
{

FILE *file_name;
if ((file_name = fopen(argv[1], "r")) == NULL)
    {
        printf("Cannot open file ...\n");
    }

fclose(file_name);

}

这让我认为它没有正确打开文件,但我不确定为什么。

【问题讨论】:

  • 请在您的问题得到解答后停止破坏。

标签: c arrays file argv


【解决方案1】:

在你的函数void file_pass (char * argv[]) -

if ((file_name = fopen(argv[1], "r")) == NULL)

你应该试试这个,而不是这个 -

if ((file_name = fopen(argv[0], "r")) == NULL)   // file's name is in argv[0] in funciton

因为数组索引以0 开头,而函数argv[1] 可能不包含任何内容。

【讨论】:

  • 效果很好。奇怪的想,我以为 argv[0] 总是程序名,而在这种情况下 argv[1] 会是输入的文件名?
  • 啊,我明白了。 C是如此善变:D
  • @Finlandia_C 是的,传递数组时可能会有点棘手:)
  • @Finlandia_C 由于argv[1] 的地址被传递,因此不会创建此副本,因此argv[0] 将包含该地址的值,即argv[1] 的值。我认为我提到的上述评论是错误的。
猜你喜欢
  • 2015-12-31
  • 1970-01-01
  • 2013-10-20
  • 2012-03-06
  • 2011-04-25
  • 2011-04-15
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
相关资源
最近更新 更多