关于'main(int参数,char *argv[])' [重复]

wqlqzqxt  于 2022-12-29  发布在  其他
关注(0)|答案(8)|浏览(104)
    • 此问题在此处已有答案**:

12年前就关闭了。

    • 可能重复:**

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[]?我们如何发送它们?

f3temu5u

f3temu5u1#

x1m2 n1 a的参数argcargv被用作向程序发送参数的一种方式,可能最熟悉的方式是使用好的ol'终端,用户可以在那里输入cat file。这里的单词cat是一个程序,它接受一个文件并将其输出到标准输出(stdout)。
程序接收argc中的参数数和argv中的参数向量,在上面的argumentccount将是2(程序名计为第一个参数),argumentv向量将包含[catfilenull]。而最后一个元素是空指针。
通常,您会这样写:

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,它包含程序environment variables的向量。main函数的参数列表还有其他变体,但由于它是非标准的,我在这里不做详细介绍。
另外,变量的命名是一个 * 约定 *,没有实际意义。遵守这个约定总是一个好主意,这样就不会混淆其他变量,但是将main定义为

int main(int c, char **v, char **e) {
   // code
   return 0;
}

对于你的第二个问题,有几种方法可以向程序发送参数,我建议你看看exec*() family of functions,它是POSIX标准,但是仅仅使用system("command arg1 arg2")可能更容易,但是使用system()通常是不受欢迎的,因为它不能保证在每个系统上都能工作。但是如果没有bashzsh或其他shell安装在 * NIX系统上,system()将失败。

aamkag61

aamkag612#

它们用于在调用程序时向程序传递参数,例如从命令行传递参数

$ gcc mysort.c -o mysort

$ mysort 2 8 9 1 4 5

上面的程序mysort是使用一些命令行参数执行的。

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

[The char字符串“2”、“8”等可以使用某些字符到数字转换函数转换为数字,例如atol()(link)]

7kqas0il

7kqas0il3#

使用argc(参数计数)和argv(参数向量),您可以在应用程序启动时获得传递的参数的数量和值。
这样,您就可以在应用程序启动时使用参数(如-version)来执行不同的操作。
但是您也可以使用int main(void)作为C中的原型。
还有第三个原型(不太为人所知,也不是标准的),它有第三个参数envp,包含环境变量。

资源:

  • 维基百科-主函数,C和C++
vjhs03f7

vjhs03f74#

argc表示传递给程序的参数个数。char* argv[]是传递的参数。argv[0]总是程序名本身。我不是100%肯定,但我认为int main()在C/C++中是有效的。

tf7tbtn2

tf7tbtn25#

argc是在运行时提供给程序的命令行参数的数量,argv是包含这些参数的字符数组(更确切地说,是C字符串数组),如果你知道你不需要命令行参数,你可以在接受void参数时声明你的main:

int main(void) {
    /* ... */ 
}

这是根据标准为main定义的仅有的两个原型,但是一些编译器也允许void的返回类型。

jaxagkaj

jaxagkaj6#

comp.lang.c FAQ处理以下问题

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

Question 11.12a中。

uxhixvfz

uxhixvfz7#

argc是命令行参数的数量,argv是表示命令行参数的字符串数组。
这给了你一个选项来响应传递给程序的参数,如果你不期望任何参数,你也可以使用int main

hmmo2u0o

hmmo2u0o8#

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

相关问题