gpt4 book ai didi

c++ - C++ 中 main() 的参数

转载 作者:行者123 更新时间:2023-11-30 04:42:05 25 4
gpt4 key购买 nike

我一直在关注 Levine 的 Flex & Bison 一书,我看到了以下代码:

main(argc, argv)
int argc;
char **argv;
{
if(argc > 1) {
if(!(yyin = fopen(argv[1], "r"))) {
perror(argv[1]);
return (1);
}
}
yylex();

我觉得这部分有点难理解,比如第一行:

char **argv;

据我所见应该与这部分有关:

if(!(yyin = fopen(argv[1], "r")))

所以我可以解释它正在读取输入操作,这是因为“r”,argv[1] 指的是控制台输入的一行。是这样吗?我不知道为什么作者使用指向 argv 的双指针。我想当没有有效输入时,它会使用 perror() 打印描述性错误,但在这种情况下会发生这种情况吗?

最佳答案

char **argv 被 C++ 编译器解释为与 char* argv[] 相同,即指向指针数组的指针。您可能已经知道,argv 表示传递给程序可执行文件的参数,例如./程序 arg1 arg2。您可以将 argv 视为一个字符串数组(C 字符串),如果这样可以简化事情的话,数组的每个元素都是一个参数。

你的解释基本上是正确的。它检查是否至少有一个参数 argc > 0(参数计数),然后使用第一个参数 (argv[1] 作为 argv[0]实际上是指程序名./program)作为文件名。然后它会尝试打开名称为 argv[1] 的文件进行读取。如果失败,fopen 返回 NULL。如果文件不存在,就会发生这种情况。

关于c++ - C++ 中 main() 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com