关于';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

[char
strings“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;
}