【问题标题】:Can't pass two command line arguments that are filenames to functions无法将两个作为文件名的命令行参数传递给函数
【发布时间】:2023-04-07 10:43:01
【问题描述】:

项目很大~400 行,所以我把它放在pastebin

只有 3 个函数需要两个文件才能工作

这是他们的名字

  graph_dim(&argv[1]); //GLOBAL PARAMETER NBR_OF_BINS GETS UPDATED IN THIS FUNCTION!!!

  FILE_graph_reading(&argv[1]); //PRINTS GRAPH ON SCREEN TOO!!!! 

  FILE_reading_global_params(&argv[2]);

在第 130-133 行。

这是我得到的:

Usage: Complete_Test6 graph_filename parameters_filename

当我将 if(argc != 2) 更改为 if(argc != 3) 时,它没有显示该消息,但程序仍然无法运行。但它应该是自动的。

消息是:

Matrix is unequal. Exiting...

在第 441 行。 提前致谢。

【问题讨论】:

  • 你不应该需要所有这些 & 符号 - 只需调用 graph_dim(argv[1]); 等等。另外,打开编译器警告 - 然后编译器会为你捕获很多类似这样的愚蠢错误。
  • @PaulR 我尝试了所有三个函数并得到了这个pastebin.com/mt5Q7KCp
  • 好的——你的代码真的很乱,但看起来你应该自己传递argv。打开编译器警告并学习使用调试器。还要学习一些通用的调试策略,比如缩小问题范围、分而治之等。
  • @PaulR 如何自己传递 argv?
  • 例如graph_dim(argv)。不过说真的,在尝试编写更多代码之前,您可能应该回到基础:阅读一本体面的 C 书籍,学习如何调试,打开编译器警告并理解它们的含义,否则您的编码只会是随机猜测,结果是灾难性的。

标签: c function command arguments line


【解决方案1】:

实际上需要传递每个命令行参数的地址..?你可以简单地传递每个参数..

改变这些

graph_dim(&argv[1]); //GLOBAL PARAMETER NBR_OF_BINS GETS UPDATED IN THIS FUNCTION!!!

FILE_graph_reading(&argv[1]); //PRINTS GRAPH ON SCREEN TOO!!!! 

FILE_reading_global_params(&argv[2]);

   graph_dim(argv[1]); //GLOBAL PARAMETER NBR_OF_BINS GETS UPDATED IN THIS FUNCTION!!!

   FILE_graph_reading(argv[1]); //PRINTS GRAPH ON SCREEN TOO!!!! 

  FILE_reading_global_params(argv[2]);

以下程序作为参考,希望对你有所帮助。

#include<stdio.h>
void grap(char * v);

int main( int c, char ** v)
{
if(c!=2)
return;
grap(v[1]);
}

void grap(char* v)
{
printf("%s\n",v);
}

【讨论】:

  • 不,它不起作用,当我尝试编译它时会出现很多错误。以下是消息:pastebin.com/mt5Q7KCp 好吧,我正在将文件名传递给一些函数。
  • @EsoTeric 我看不到您的链接.. 所以,请您至少提及功能和错误
  • C:\C\C++\Project\Complete_Test6.c: In function 'main': C:\C\C++\Project\Complete_Test6.c:131:3: warning: passing argument 1 of 'graph_dim' from incompatible pointer type [enabled by default] graph_dim(argv[1]); //GLOBAL PARAMETER NBR_OF_BINS GETS UPDATED IN THIS FUNCTION!!!
  • @EsoTeric 我认为这是函数调用..你是怎么赶上的..?你能提一下吗..??
  • @EsoTeric:第 6 行(在 pastebin 中)的消息说函数原型是 void graph_dim(char* argv[]);。看起来它希望你通过整个命令行。使用graph_dim(argv)'. That will get you past that error... I would actually change graph_dim(.)` 来获取char*name 而不是char* argv[]
猜你喜欢
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 2012-12-21
  • 2012-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
相关资源
最近更新 更多