【问题标题】:Passing Multiple Arguments to main()将多个参数传递给 main()
【发布时间】:2017-06-14 04:59:18
【问题描述】:

对于我的班级,我需要创建一个在运行时接受多个参数的函数:

void main(int x, int y, int generation, char *layout[20])

但是,当程序使用我对这些变量的输入运行时,信息不会存储在调试过程中

run 3 3 3 Test_Round
print x // returns 5
print y // returns -8779

如何将多个参数传递给 main 函数,以便 main 能够识别我给它的参数?

谢谢大家!我只是使用 argv[1] 等来获取我需要的正确数据!

【问题讨论】:

  • 你的实现是否支持这种类型的主函数?
  • 我认为它确实如此,因为它可以编译并且只给出警告。
  • 你应该检查文档。
  • @IlyaMethot 这是一个糟糕的假设。 C 标准从不要求错误。在许多情况下,根本不需要诊断错误代码。如果它必须被诊断出来,一个警告就足够了。不要忽视警告。
  • main 应该总是定义为int main(int argc, char **argv)。如果您以my_program 123 456 789 调用您的程序,当输入main 时,argc 将为4,argv[0] 将指向一个包含“my_program\0”的字符数组,argv[1] 将指向一个包含“123\ 0”,argv[2] 将指向一个包含“456\0”的字符数组,而 argv[3] 将指向一个包含(你猜对了!)“789\0”的字符串。

标签: c parameters command-line-arguments main


【解决方案1】:

该标准清楚地说明了您需要如何声明您的主函数。

来自 C99 标准:

5.1.2.2.1 程序启动

程序启动时调用的函数名为main。实现没有为此声明原型 功能。它应使用 int返回类型no 来定义 参数

int main(void) { /* ... */ } 

两个参数

(这里称为argcargv,尽管可以使用任何名称,如 它们在声明它们的函数中是本地的):

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

或等价物;9) 或在 some 其他实现定义的方式

如果它们被声明,则 主函数的参数应遵循以下约束

——argc 的值应为非负

argv[argc] 应为 null 指针。

——如果argc的值大于零,则数组 成员 argv[0]argv[argc-1]包含指针 到字符串,由主机赋予实现定义的值 程序启动前的环境。目的是提供给 在程序启动之前从其他地方确定的程序信息 在托管环境中。如果宿主环境不能 提供带有大写和小写字母的字符串, 实施应确保字符串以 小写。

——如果argc的值大于零,则字符串 argv[0]所指向的代表程序名; argv[0][0] 应为 空字符,如果程序名称不能从主机获得 环境。如果 argc 的值大于 1,则字符串 argv[1]argv[argc-1] 指向的代表程序 参数。

——参数argcargv以及指向的字符串 argv 数组应由程序可修改,并保留其 程序启动程序终止之间的最后存储值

【讨论】:

  • 我有点困惑。似乎任何其他参数都存储在 argv[1] 中的某个位置。如何找到附加参数并将它们存储/使用在变量中?
  • the strings pointed to by argv[1] through argv[argc-1] represent the program parameters.
  • argv[0] represents the program name
【解决方案2】:
 void main(int x, int y, int generation, char *layout[20])

main() 的无效签名。你需要使用

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

其中,argv[0]argv[argc-1] 将保存传递给 main() 的参数。

引用C11,第 §5.1.2.2.2 章,

如果argc的值大于零,则argv[0]指向的字符串 代表程序名称; argv[0][0] 应为空字符,如果 程序名称在主机环境中不可用。如果argc 的值为 大于一,argv[1]argv[argc-1] 指向的字符串 表示程序参数。

【讨论】:

  • 如何定义我输入的参数?我是否使用 int x 引用它们? argv[0] = x;等等?
  • argv[0] 是可执行文件的名称,所以 x = argv[1]、y = argv[2] 等
【解决方案3】:

你不能在主函数中传递两个以上的参数。在主函数中,您只能传递two 参数或Zero 参数。

使用以下参数,您可以在命令行中传递值。

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

【讨论】:

猜你喜欢
  • 2022-07-26
  • 2012-03-03
  • 1970-01-01
  • 2014-06-28
  • 2019-03-17
  • 2016-07-18
  • 2013-01-07
  • 2011-10-10
  • 2013-09-15
相关资源
最近更新 更多