【问题标题】:Passing file as an argument into my program and then into a function?将文件作为参数传递给我的程序,然后传递给函数?
【发布时间】:2015-11-27 16:08:49
【问题描述】:

我正在使用 CodeBlocks 在 C 中创建我的程序,但遇到以下问题。

我正在尝试打开和读取 .txt 文件,如果我将其放入主函数中,它可以正常工作,如下所示:

int main(int argc, char *argv[])
{

FILE *input;

input = fopen("file.txt", "r");

char singleLine[50];

while(!feof(input)){

fgets(singleLine, 50, input);
puts(singleLine);
}

但是,如果我使用“Set Program's Arguments”选项将文件“file.txt”的名称设置为 CodeBlock 中的参数,然后想将它传递给一个可以像这样读取它的函数:

void read(char *name){

File *input;

....
....

}

然后这样称呼它:

int main(int argc, char *argv[])
{


read(&argv[1]);

}

它不起作用,程序崩溃。

【问题讨论】:

标签: c function file pointers


【解决方案1】:

如果你的函数原型是

void read(char *name)

那么你需要这样称呼它

read(argv[1]);

因为,argv[1] 本身给你一个char *,而不是&argv[1]

FWIW,在直接使用之前一定要检查argv[n]的有效性。

【讨论】:

  • 您好,感谢您的回复!我确实在那里犯了一个错误,但它仍然无法正常工作。也许与文件的位置有关?
  • @Daeto 检查argc > 1 后尝试在main() read() 中再次打印文件名。您还必须在尝试打开文件后测试input == NULL。最后请不要使用read() 作为函数名——它已经用于库函数。
  • printf 函数会在 main 函数和 read 函数中打印文件名,所以我想将文件名作为参数传递在这里不是问题。但是,我添加了条件来检查打开文件是否成功,结果证明不是。知道为什么吗?函数中的命令看起来就像我上面在 main 中描述的一样。
  • @Daeto 您正在打开文件进行阅读,所以它必须已经存在,在程序将查找的路径上。
  • @Daeto 你已经展示了有效的代码,但你没有展示无效的代码。
【解决方案2】:

测试

read(&argv[0]);

在控制台中查看 argv 中的内容

printf(&argv[0]);

【讨论】:

  • 我很困惑。 Sourav 说我不应该像这样将参数传递给 read 函数。另外,argv[0] 是我的程序的位置,不是吗?为什么我需要那个?如果我打印 argv[1],它会打印 file.txt,这是与我的程序位于同一目录中的文件的名称。所以我猜它真的在那里。
  • printf(&argv[0]); 真的是一个糟糕的例子,甚至忽略了逻辑,无论如何。
猜你喜欢
  • 2013-01-27
  • 2014-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 2010-10-04
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多