关于'main(int argc,char * argv )'
可能重复:
main()的参数是什么?
int argc,char * argv []是什么意思?
每个程序都以main(int argc, char *argv[])
定义开始。
我不明白这是什么意思。 如果有人能够解释为什么我们不使用这些参数,我会很高兴。 为什么不只是: int main()
?
程序的名称是*argv[]
和argc
一个元素是*argv[]
的参数个数的计数吗? 发送给*argv[]
的其他参数是什么? 我们如何发送?
主参数argc
和argv
用作向程序发送参数的一种方式,可能最常见的方式是使用用户可以键入cat file
的好olterminal。 这里的单词cat
是一个程序,它将一个文件输出到标准输出( stdout
)。
程序接收argc
的参数个数和argv
中的参数向量,上面的参数 count为2(程序名称作为第一个参数), arg ector将包含[ cat
, file
, null ]。 而最后一个元素是一个空指针。
通常情况下,你会这样写:
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系统上没有安装bash
, zsh
或其他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
定义的唯一两个原型,但是一些编译器也允许返回void
types。 更多关于维基百科 。
你可以使用诸如app -something -somethingelse
参数来运行你的应用app -something -somethingelse
。 int argc
表示这些参数的个数,而char *argv[]
是一个实际参数被传递到应用程序中的数组。 这样你可以在你的应用程序中使用它们。