关于';main(int argc,char*argv[])和#x27;
可能的重复项:关于';main(int argc,char*argv[])和#x27;,c,argv,argc,C,Argv,Argc,可能的重复项: 每个程序都以main(int-argc,char*argv[])定义开始 我不明白这是什么意思。如果有人能解释为什么我们不在程序中使用这些参数,我会非常高兴?为什么不仅仅是:intmain() 程序名是*argv[]的元素之一,而argc是*argv[]中参数数的计数?发送到*argv[]的其他参数是什么?如何发送它们?argc是命令行参数的数量,argv是表示命令行参数的字符串数组 这使您可以选择对传递给程序的参数作出反应。如果您不希望有任何参数,那么最好将int main
每个程序都以
main(int-argc,char*argv[])
定义开始
我不明白这是什么意思。如果有人能解释为什么我们不在程序中使用这些参数,我会非常高兴?为什么不仅仅是:intmain()
程序名是
*argv[]
的元素之一,而argc
是*argv[]
中参数数的计数?发送到*argv[]
的其他参数是什么?如何发送它们?argc
是命令行参数的数量,argv
是表示命令行参数的字符串数组
这使您可以选择对传递给程序的参数作出反应。如果您不希望有任何参数,那么最好将int main
与argc
(参数计数)和argv
(参数向量)一起使用。您可以在启动应用程序时获得传递参数的数量和值
这样,当应用程序以不同的方式启动时,可以使用参数(例如-version
)
但是您也可以使用intmain(void)
作为C中的原型
还有第三个原型(不太为人所知,也不太标准),第三个参数是envp
。它包含环境变量
资源:
argc
表示传递给程序的参数数char*argv[]
是传递的参数argv[0]
始终是程序名本身。我不是百分之百确定,但我认为int main()
在C/C++中是有效的。这些参数用于在调用程序时向程序传递参数,例如从命令行传递参数
$ gcc mysort.c -o mysort
$ mysort 2 8 9 1 4 5
上面,使用一些命令行参数执行程序mysort
。在main(int argc,char*argv[])
内部,这将导致
Argument Count, argc = 7
因为有7个参数(计算程序),并且
下面是一个完整的例子
$ 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
$cat mysort.c
#包括
int main(int argc,char*argv[]){
printf(“argc=%d\n”,argc);
对于(int i=0;i
[charstrings“2”、“8”等可以使用一些字符到数字的转换函数转换为数字,例如
atol()
)]包含这些参数。如果您知道不需要命令行参数,可以在使用void
参数时声明main,而不是:
int main(void) {
/* ... */
}
这是根据标准为
main
定义的仅有的两个原型,但是一些编译器也允许返回类型为void
。更多信息。您可以使用参数运行应用程序,例如app-somethingese
int argc
表示这些参数的数量,char*argv[]
是一个数组,实际参数被传递到应用程序中。通过这种方式,您可以在应用程序内部使用它们。中处理的问题是“main()的正确声明是什么?”中的argc
和argv
的main
用作向程序发送参数的一种方式,可能最熟悉的方法是使用良好的ol'终端,用户可以在其中键入cat文件
。这里的单词cat
是一个程序,它获取一个文件并将其输出到标准输出(stdout
)
"What's the correct declaration of main()?"
程序接收argc
中的参数数和argv
中的参数向量,在上面的argumentcount将是两个(程序名计为第一个参数),并且argumentv列将包含[cat
,文件
,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语言中,在main
之前没有int
,这是一种暗示。今天,这被认为是一个错误
在兼容POSIX的系统(和Windows)上,可以使用第三个参数char**envp
,该参数包含程序向量。存在main
函数的参数列表的进一步变化,但由于它是非标准的,因此我不在此详述
此外,变量的命名是一种约定,没有实际意义。坚持这一点总是一个好主意,这样您就不会混淆其他变量,但将main
定义为
int main(int c, char **v, char **e) {
// code
return 0;
}
对于第二个问题,有几种向程序发送参数的方法。我建议您查看标准的POSIX,但是只使用
(“命令arg1 arg2”)
,可能会更容易,但是使用系统()
通常不受欢迎,因为它不能保证在每个系统上都能工作。我自己没有测试过它;但是如果*NIX系统上没有安装bash
、zsh
,或者其他shell,system()
将失败。程序名与传递给main()的参数有什么关系?@Potatoswatter,@You,我更新了我的答案以解释
int main(int c, char **v, char **e) {
// code
return 0;
}