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

时间:2010-10-09 21:54:28

标签: c argv argc

  

可能重复:
  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[]的其他参数是什么?我们如何发送它们?

8 个答案:

答案 0 :(得分:108)

argc的{​​{1}}和argv的参数被用作向程序发送参数的一种方式,可能最熟悉的方法是使用用户所在的良好的终端可以输入 main 。这里的单词cat file是一个程序,它接收一个文件并将其输出到标准输出(cat)。

程序接收stdout中的参数数量和argc中参数的矢量,上面的 arg ument c 数量将是两个(程序名称计为第一个参数), arg ument v ector将包含[argvcat]。而最后一个元素是空指针。

通常,你会这样写:

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)

comp.lang.c FAQQuestion 11.12a中处理问题

"What's the correct declaration of main()?"

答案 6 :(得分:0)

argc是命令行参数的数量,argv是表示命令行参数的字符串数组。

这使您可以选择对传递给程序的参数作出反应。如果您没有期望,也可以使用int main

答案 7 :(得分:0)

您可以使用app -something -somethingelse等参数运行应用程序。 int argc表示这些参数的数量,char *argv[]是一个数组,其实际参数将传递到您的应用程序中。这样您就可以在应用程序内部使用它们。