gpt4 book ai didi

c - 如何从 C 中的主函数打印 argv 参数?

转载 作者:太空狗 更新时间:2023-10-29 16:43:39 25 4
gpt4 key购买 nike

所以我才知道我们可以给主函数两个参数,即“argc”和“argv”。但是我无法理解其中的 argv 是什么:int main(int argc, char* argv[]);

argv 是字符数组吗?还是指向字符的指针数组?无论哪种方式,我都在寻找一种方法来打印出用户传递给该程序的参数。这是我写的代码,但可以这么说,它并没有打印 argv。这有什么问题吗?我想是我对 argv 的理解导致这段代码不正确。

#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("%d\n",argc);
for(i=0;i<argc-1;i++)
{
printf("%s",*argv[i]);
}
return 0;
}

根据我从答案中得到的建议,我按如下方式更正了我的代码。

#include<stdio.h>
int main(int argc, char *argv[])
{
int i;
printf("%d\n",argc);
for(i=1;i<argc;i++)
{
printf("%s",argv[i]);
}
return 0;
}

我在 Windows 8.1 电脑上的 VMWare 中使用 Ubuntu Linux。这是我得到的输出。它只是打印 argc,之后什么也没有。有什么问题?是我编译它的方式还是在 Linux 终端中的方式?

The snapshot of my terminal

在上图中,我希望再次打印数字 2、4、5、3,但它们没有打印出来。

谢谢。

最佳答案

让我们一步步解释清楚。首先,当您通过调用类似...的方式来调用您的程序时

./my-program arg0 arg1 arg2

您要向它传递一系列三个参数,对吗?每个参数都是一个字符串,对吧?现在,main 函数可以具有两个原型(prototype)之一,如 C 标准所指定的...

int main(); // Let's not worry about this for now
int main(int argc, char **argv);

想法是 main 能够处理您提供的参数。 argc 提供参数的数量。如果您注意到,在传递三个参数时,argc 是 4!发生这种情况是因为第一个参数在所有其他参数 ./my-program 之前传递,并让您的程序识别自己。

现在,char **argv 是什么意思? X* 形式的东西是指向 X 的指针,对吗?所以,char * 是指向char 的指针,而char ** 是指向char 的指针。在 C 语言中,字符串只是一个以零结尾的 char 数组,数组可以“降级”为指针。这意味着 argv 是一个字符串数组,其中第一个 argv[0] 是程序的名称。

现在,C 标准允许您为 main 编写任何“兼容”原型(prototype)。例如,您可以编写任何这些...

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

你现在不需要理解它们都是什么意思,只需要知道argv是一个字符串数组,你应该永远不要修改字符串作为原始main 原型(prototype)似乎信任你。现在,知道参数从 argv[1] 开始,您的代码...

for(i=0;i<argc-1;i++)

表示:“对于从 0 到 argc - 1 范围内的每个 i”。

    printf("%s",*argv[i]);

表示:“打印 argv 的第 i 个元素的第一个字符”。为什么这是错误的?首先,您要打印一个 char,并告诉 printf 它是一个字符串。 这有未定义的行为。然后,您将迭代 argv 的第一个 i 元素。这意味着第一个“非参数”元素将包含在混合中,而最后一个参数不会。要解决它,请写一些像...

for(i = 1; i < argc; i++)

表示:“对于从 1argc 范围内的每个 i”。

    printf("%s", argv[i]);

表示:“将 argv 的第 i 元素打印到 stdout 上。

关于c - 如何从 C 中的主函数打印 argv 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35860794/

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