可能重复:
What are the arguments to main() for?
What does int argc, char *argv[] mean?
每个程序都以main(int argc, char *argv[])
定义开头。
我不明白这意味着什么。如果我们在程序中不使用这些参数,有人可以解释为什么我们会使用这些参数,我会很高兴的吗?为什么不:int main()
?
程序的名称是*argv[]
和argc
的元素之一是*argv[]
中参数数量的计数吗?发送给*argv[]
的其他参数是什么?我们如何发送它们?
答案 0 :(得分:108)
argc
的{{1}}和argv
的参数被用作向程序发送参数的一种方式,可能最熟悉的方法是使用用户所在的良好的终端可以输入 main
。这里的单词cat file
是一个程序,它接收一个文件并将其输出到标准输出(cat
)。
程序接收stdout
中的参数数量和argc
中参数的矢量,上面的 arg ument c 数量将是两个(程序名称计为第一个参数), arg ument v ector将包含[argv
,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.
}
- 函数同样有效:
main
在早期版本的C语言中,int main() {
// code
return 0; // Zero indicates success, while any
// Non-Zero value indicates a failure/error
}
之前没有int
,因为这是隐含的。今天,这被认为是一个错误。
在 POSIX 兼容系统(和Windows)上,可以使用第三个参数main
,其中包含程序environment variables的向量。存在char **envp
函数的参数列表的进一步变体,但我不会在这里详细说明,因为它是非标准的。
此外,变量的命名是约定并且没有实际意义。坚持这一点总是一个好主意,这样你就不会混淆他人,但将main
定义为
main
对于第二个问题,有几种方法可以向程序发送参数。我建议您查看<{>> POSIX - 标准的exec*()
family of functions,但只使用system
{{1}可能更容易但是int main(int c, char **v, char **e) {
// code
return 0;
}
的使用通常是不受欢迎的,因为它不能保证在每个系统上都能正常工作。我自己没有测试过;但如果* NIX系统上没有安装("command arg1 arg2")
,system()
或其他shell,则bash
将失败。
答案 1 :(得分:55)
用于在程序调用时将参数传递给程序,例如从命令行传递
$ 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
[char
字符串“2”,“8”等可以使用一些字符到数字转换功能转换为数字,例如, atol()
(link)]
答案 2 :(得分:14)
使用argc
(参数计数)和argv
(参数向量),可以在启动应用程序时获取传递参数的数量和值。
这样,您可以在启动应用程序时以不同的方式使用参数(例如-version
)。
但您也可以使用int main(void)
作为C中的原型。
有第三个(不太知名和非标准)原型,第三个参数是envp
。它包含环境变量。
<强>资源:强>
答案 3 :(得分:3)
argc
表示传递给程序的参数个数。 char* argv[]
是传递的参数。 argv[0]
始终是程序名称本身。我不是100%肯定,但我认为int main()
在C / C ++中是有效的。
答案 4 :(得分:1)
argc
是在运行时为程序提供的命令行参数的数量,argv
是包含这些参数的字符数组(而不是C字符串数组)的数组。如果你知道你不需要命令行参数,你可以声明你的主要参加void
参数,而不是:
int main(void) {
/* ... */
}
这是根据标准为main
定义的唯一两个原型,但是一些编译器也允许返回类型void
。有关on Wikipedia的更多信息。
答案 5 :(得分:1)
答案 6 :(得分:0)
argc
是命令行参数的数量,argv
是表示命令行参数的字符串数组。
这使您可以选择对传递给程序的参数作出反应。如果您没有期望,也可以使用int main
。
答案 7 :(得分:0)
您可以使用app -something -somethingelse
等参数运行应用程序。 int argc
表示这些参数的数量,char *argv[]
是一个数组,其实际参数将传递到您的应用程序中。这样您就可以在应用程序内部使用它们。