为了账号安全,请及时绑定邮箱和手机立即绑定

C中main的参数

C中main的参数

C
繁星coding 2019-10-25 15:07:24
我不知道该怎么办!我对C基础有很好的理解。结构,文件IO,字符串等。CLA之外的所有内容。由于某种原因,我无法理解这个概念。任何建议,帮助或建议。PS我是Linux用户
查看完整描述

3 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

的签名main是:


int main(int argc, char **argv);

argc指传入的命令行参数的数量,其中包括用户调用的程序的实际名称。  argv包含从索引1开始的实际参数。索引0是程序名称。


因此,如果您像这样运行程序:


./program hello world

然后:


argc为3。

argv [0]将为“ ./program”。

argv [1]将为“ hello”。

argv [2]将是“世界”。


查看完整回答
反对 回复 2019-10-25
?
暮色呼如

TA贡献1853条经验 获得超9个赞

想象一下


*main() is also a function which is called by something else (like another FunctioN)


*the arguments to it is decided by the FunctioN


*the second argument is an array of strings


*the first argument is a number representing the number of strings


*do something with the strings

也许一个示例程序会有所帮助。


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

{


    printf("you entered in reverse order:\n");


    while(argc--)

    {

        printf("%s\n",argv[argc]);

    }


return 0;

}

它只是以相反的顺序将您输入的所有内容打印为args,但是您应该制作新的程序来做更多有用的事情。


编译它(如打个招呼),从终端运行它的参数如下


./hello am i here

然后尝试对其进行修改,以使其尝试检查两个字符串是否彼此相反,那么您将需要检查argc参数是否恰好为三个,如果还有其他内容会打印错误


if(argc!=3)/*3 because even the executables name string is on argc*/

{

    printf("unexpected number of arguments\n");

    return -1;

}

然后检查argv [2]是否与argv [1]相反,并打印结果


./hello asdf fdsa

应该输出


they are exact reverses of each other

最好的例子是文件复制程序,就像cp


cp file1 file2


cp是第一个参数(argv [0]而不是argv [1]),大多数情况下,除非需要引用或其他内容,否则应忽略第一个参数


如果您制作了cp程序,则您确实了解了主要参数...


查看完整回答
反对 回复 2019-10-25
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

Siamore,我一直看到每个人都使用命令行来编译程序。我通过代码:: blocks从ide使用x11终端,这是我的Linux机器上的gnu gcc编译器。我从未从命令行编译过程序。因此,Siamore,如果我希望程序名称为cp,是否要初始化argv [0] =“ cp”; Cp是字符串文字。而且所有要输出到stdout的东西都在命令行上?你给我的例子Siamore我理解了!即使您输入的字符串只有几个单词,但仍然只是一个arg。因为它被用双引号引起来。所以arg [0](编名)实际上是带换行符的字符串文字?所以我明白为什么您使用if(argc!= 3)打印错误。因为编名= argv [0],此后还有2个args,并且现在发生了错误。我还会使用什么其他原因?我真的认为我对如何从命令行或终端进行编译缺乏了解是我对此领域缺乏了解的原因!!Siamore,您帮助我更好地了解了cla!仍然没有完全理解,但我并未忘记这个概念。我将学习从终端进行编译,然后重新阅读您编写的内容。我敢打赌,那我会完全理解的!在您的帮助下,大声笑


<>我不是写自己的代码,而是我写的代码。


#include <stdio.h>


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

{

    int i;


    printf("The following arguments were passed to main(): ");

    for(i=1; i<argc; i++) printf("%s ", argv[i]);

    printf("\n");


    return 0;

这是输出:


anthony@anthony:~\Documents/C_Programming/CLA$ ./CLA hey man

The follow arguments were passed to main(): hey man

anthony@anthony:~\Documents/C_Programming/CLA$ ./CLA hi how are you doing?

The follow arguments were passed to main(): hi how are you doing?

因此argv是字符串文字的表,而argc是它们的数量。现在argv [0]是程序的名称。因此,如果我键入./CLA来运行程序,则./CLA为argv [0]。上面的程序将命令行设置为接受无限数量的参数。如果需要,我可以将它们设置为仅取3或4。就像显示的一个或您的示例一样,Siamore ... if(argc!= 3)printf(“此处出现一些错误”); 谢谢Siamore,没有您就做不到!多亏了帖子的其余部分的时间和精力!


PS,以防将来出现这样的问题……您永远不会知道问题是因为我使用的是IDE AKA Code :: Blocks。如果要在上面运行该程序,它将打印该程序的路径/目录。例如:〜/ Documents / C / CLA.c,它必须从终端运行并使用命令行进行编译。gcc -o CLA main.c,并且您必须位于文件目录中。


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 576 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信