代码之家  ›  专栏  ›  技术社区  ›  iProgram

为什么参数3等于“TERM\u PROGRAM=Apple\u Terminal”?

  •  0
  • iProgram  · 技术社区  · 7 年前

    我正在制作汇编代码,它相当于

    #include <stdio.h>
    
    int main(int argc, char *args[]){
      printf("%s", args[0]);
      printf("%s", args[1]);
      printf("%s", args[2]);
      return 0;
    }
    

    $ ./main :
    ./main(null)TERM_PROGRAM=Apple_Terminal

    $ ./main one :
    ./mainone(null)

    $ ./main one two
    ./mainonetwo

    执行时 ./main one ./main two ,输出有意义。然而,为什么打电话 ./main TERM_PROGRAM=Apple_Terminal



    奇怪的是,当我编写一个bash脚本来执行:

    echo $0
    echo $1
    echo $2
    

    我可以得到以下输出 /主要 没有参数:

    ./main
    <empty line>
    <empty line>
    

    在哪里? <empty line> 是空行。

    1 回复  |  直到 7 年前
        1
  •  1
  •   user58697    7 年前

    严格来说,访问 argv 超过 argc 是一种未定义的行为。在你的情况下,请记住 main 签名是 (int args, char ** argv, char ** envp) . 最后一个参数指向程序环境,恰好环境字符串在内存中与程序参数相邻。