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

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

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

我不明白这是什么意思。 如果有人能够解释为什么我们不使用这些参数,我会很高兴。 为什么不只是: int main()

程序的名称是*argv[]argc一个元素是*argv[]的参数个数的计数吗? 发送给*argv[]的其他参数是什么? 我们如何发送?

主参数argcargv用作向程序发送参数的一种方式,可能最常见的方式是使用用户可以键入cat file的好olterminal。 这里的单词cat是一个程序,它将一个文件输出到标准输出( stdout )。

程序接收argc的参数个数和argv中的参数向量,上面的参数 count为2(程序名称作为第一个参数), arg ector将包含[ catfilenull ]。 而最后一个元素是一个空指针。

通常情况下,你会这样写:

 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. } 

如果你的程序不需要任何参数,那么用下面的方式编写一个main函数是同样有效的:

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

在C语言的早期版本中,主要是没有int ,因为这是隐含的。 今天,这被认为是一个错误。

在符合POSIX的系统(和Windows)上,可能使用第三个参数char **envp ,它包含程序variables的向量。 存在main函数参数列表的更多变体,但这里不详细介绍,因为它是非标准的。

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

 int main(int c, char **v, char **e) { // code return 0; } 

对于第二个问题,有几种方法可以将参数发送给程序。 我build议你看看POSIX标准的exec*()系列函数 ,但是使用system ("command arg1 arg2")可能更容易 ,但是system()的使用通常被忽略不保证在每个系统上工作。 我自己没有testing过; 但是如果在* NIX系统上没有安装bashzsh或其他shell, system()将会失败。

这些是用来传递参数到你的程序,例如从命令行,当一个程序被调用

 $ gcc mysort.c -o mysort $ mysort 2 8 9 1 4 5 

以上,程序mysort是用一些命令行参数执行的。 在main( int argc, char * argv[]) ,会导致

 Argument Count, argc = 7 

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

 Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" }; 

以下是一个完整的例子。

 $ 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 

[string“2”,“8”等可以使用一些字符到数字的转换函数转换为数字,例如atol() (link )]

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

这样,当你的应用程序开始采取不同的方式时,你可以使用参数(比如-version )。

但是你也可以在C中使用int main(void)作为原型。

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


资源:

  • 维基百科 – 主要function,C和C ++

argc表示传递给程序的参数个数。 char* argv[]是传递的参数。 argv[0]始终是程序名称本身。 我不是100%确定,但我认为int main()在C / C ++中是有效的。

comp.lang.c常见问题处理这个问题

  “main()的正确声明是什么?” 

在问题11.12a中 。

argc是命令行参数的数量, argv是表示命令行参数的string数组。

这使您可以select对传递给程序的参数作出反应。 如果你没有预料到的话,你也可以使用int main

argc是在运行时赋予程序的命令行参数的数量, argv是包含这些参数的字符数组(而是一串Cstring)的数组。 如果你知道你不需要命令行参数,你可以声明你的主要参数为void ,而是:

 int main(void) { /* ... */ } 

这些是根据标准为main定义的唯一两个原型,但是一些编译器也允许返回voidtypes。 更多关于维基百科 。

你可以使用诸如app -something -somethingelse参数来运行你的应用app -something -somethingelseint argc表示这些参数的个数,而char *argv[]是一个实际参数被传递到应用程序中的数组。 这样你可以在你的应用程序中使用它们。