关于'main(int argc,char*argv [])'

fud*_*din 93 c argv argc

可能重复:
main()的参数是什么?
int argc,char*argv []是什么意思?

每个程序都从main(int argc, char *argv[])定义开始.

我不明白这意味着什么.如果我们在程序中不使用这些参数,有人可以解释为什么我们会使用这些参数,我会很高兴的吗?为什么不int main()呢:?

程序的名称是其中的一个元素,*argv[]并且argc是参数个数的计数*argv[]?发送到的其他参数是*argv[]什么?我们如何发送它们?

Fra*_*ank 116

参数argcargvof main用作向程序发送参数的一种方式,可能最熟悉的方法是使用用户可以输入的良好的终端cat file.这个词cat是一个程序,它接收一个文件并将其输出到标准输出(stdout).

程序接收的参数的数目argc和参数向量中argv,在上述的精氨酸 ument Ç 'mount将两(程序名称计数作为第一个参数)和ARG ument v厄克托将包含[ cat,file, ].而最后一个元素是一个空指针.

通常,你会这样写:

int  // Specifies that type of variable the function returns.
     // main() must return an integer
main ( int argc, char **argv ) {
     // code
     return 0; // Indicates that everything went well.
}
Run Code Online (Sandbox Code Playgroud)

如果您的程序不需要任何参数,以main下列方式编写函数同样有效:

int main() {
  // code
  return 0; // Zero indicates success, while any 
  // Non-Zero value indicates a failure/error
}
Run Code Online (Sandbox Code Playgroud)

在早期版本的C语言中,int之前没有main暗示这一点.今天,这被认为是一个错误.

POSIX兼容的系统(和Windows),存在使用第三个参数可能char **envp包含的程序的载体ENV ironment变量.main函数的参数列表的进一步变化存在,但我不会在这里详细说明,因为它是非标准的.

此外,变量的命名是一种惯例,没有实际意义.坚持这一点总是一个好主意,这样你就不会混淆别人,但定义main为同样有效

int main(int c, char **v, char **e) {
   // code
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

对于第二个问题,有几种方法可以将参数发送给程序.我建议你看一下exec*()家庭的功能POSIX -标准,但它可能是更容易只使用,但使用时,它不能保证通常皱起眉头每个系统上工作.我自己没有测试过; 但如果没有,或者其他壳内安装了一个*NIX系统上,将失败.system("command arg1 arg2")system()bashzshsystem()


Aru*_*run 60

这些用于在调用程序时将参数传递给程序,例如从命令行传递

$ gcc mysort.c -o mysort

$ mysort 2 8 9 1 4 5
Run Code Online (Sandbox Code Playgroud)

上面,程序mysort使用一些命令行参数执行.在里面main( int argc, char * argv[]),这将导致

Argument Count, argc = 7 
Run Code Online (Sandbox Code Playgroud)

因为有7个参数(计算程序),和

Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" };
Run Code Online (Sandbox Code Playgroud)

以下是一个完整的例子.

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

$ gcc mysort.c -o mysort

$ ./mysort 2 8 9 1 4 5
argc = 7
argv[ 0 ] = ./mysort
argv[ 1 ] = 2
argv[ 2 ] = 8
argv[ 3 ] = 9
argv[ 4 ] = 1
argv[ 5 ] = 4
argv[ 6 ] = 5
Run Code Online (Sandbox Code Playgroud)

[ char字符串"2","8"等可以使用一些字符到数字转换功能转换为数字,例如atol() (链接)]


Col*_*ert 15

使用argc(参数计数)和argv(参数向量),可以在启动应用程序时获取传递参数的数量和值.

这样,您可以-version在启动应用程序时以不同的方式使用参数(例如).

但你也可以int main(void)在C中用作原型.

有第三个(不太知名的和非标准的)原型,第三个参数是envp.它包含环境变量.


资源: