=2) t=b[1]; printf("Directory scan of %s\n",t); exit(0); } 假设把这段�" />
红联Linux门户
Linux帮助

主函数的参数传递

发布时间:2010-10-26 11:33:20来源:红联作者:wucongdonglai
最近在看linux的程序,有一个问题一直没搞明白:就是主函数的参数是如何传递的!比如有这么一段程序:
int main(int a, char* b[])
{
char *t=".";
if (a>=2)
t=b[1];
printf("Directory scan of %s\n",t);
exit(0);
}
假设把这段函数加上头文件后编译生成hello(可运行文件),然后就
./hello /usr/local
然后底下输出就是
Directory scan of /usr/local
这里的参数是怎么传递的呢?
哪位大大能详细解释一下?或者说有现成的资料最好!网上找了找,满大街都是java的
文章评论

共有 10 条评论

  1. wucongdonglai 于 2010-10-28 11:23:23发表:

    10# deepwhite
    恩,也是,像copy,如果不传递给它参数的话,很难实现的!只是在图形化界面下都被隐藏掉了!不过我记得好像是哪本编程书还是还是编程思想上说:的确不建议给主函数传递参数,因为我当时学完谭的C语言后,刚开始接触编程,我还有过想法说:函数调用都是传递参数的,为什么主函数不给参数?所以对这个印象很深刻

  2. deepwhite 于 2010-10-28 09:12:53发表:

    引用:
    7# deepwhite
    恩,是《linux程序设计》这里看的,一般的windows下的编程都看不到这东东的,好像也不建议给主函数传参数
    wucongdonglai 发表于 2010-10-27 16:16


    呵呵, 错觉, Windows 下面也有的,比如 Windows 自带的 copy, delete, msiexec 等等工具,他们的参数都应该是这样传的,不会说 “不建议”。只是可能很多的GUI程序没有用这两个东西。

  3. wucongdonglai 于 2010-10-27 16:16:17发表:

    7# deepwhite
    恩,是《linux程序设计》这里看的,一般的windows下的编程都看不到这东东的,好像也不建议给主函数传参数

  4. wcj1123zouhua 于 2010-10-27 09:41:14发表:

    继续努力学习

  5. deepwhite 于 2010-10-27 09:11:46发表:

    引用:
    2# shenhao0129
    原来是这样的:终于明白了我:
    一般申明如int main(int argc, char* argv[])
    argc是指参数的个数,argv是指参数的字符串数组,其中包括程序名自身
    比如函数名如hello,在shell下输入hello lef ...
    wucongdonglai 发表于 2010-10-26 14:45

    你得到的解释应该是一本标准C语言教程中给出的解释。我还以为你问的是他们是怎么实现和调用的呢,才让你看看内核,我想复杂了。

  6. gobeta 于 2010-10-26 14:58:49发表:

    路过

  7. wucongdonglai 于 2010-10-26 14:45:33发表:

    2# shenhao0129
    原来是这样的:终于明白了我:
    一般申明如int main(int argc, char* argv[])
    argc是指参数的个数,argv是指参数的字符串数组,其中包括程序名自身
    比如函数名如hello,在shell下输入hello left right 'and me'
    main()中带的参数就是
    argc:4
    argv:{'hello' 'left' 'right' 'and me'}
    另外,linux的shell一般会设置argc和argv前对文件名参数进行通配符扩展
    对此我还真小白啊,以前在windows下就没考虑过这个问题,哎

  8. wucongdonglai 于 2010-10-26 14:30:36发表:

    3# deepwhite
    恩,就是因为看内核的源码嘛,所以才有这问题!

  9. deepwhite 于 2010-10-26 14:09:14发表:

    引用:
    最近在看linux的程序,有一个问题一直没搞明白:就是主函数的参数是如何传递的!比如有这么一段程序:
    int main(int a, char* b[])
    {
    char *t=".";
    if (a>=2)
    t=b[1];
    printf("Direct ...
    wucongdonglai 发表于 2010-10-26 11:33


    你前一阵不是看了内核么?想想内核的进程管理那部分, sys_fork() 的实现。

  10. shenhao0129 于 2010-10-26 12:20:06发表:

    前面一个是个数,后面一个是参数的地址