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

可能重复:
main()对于什么参数?
int argc,char * argv []是什么意思?

每个程序都以main(int argc, char *argv[])定义开始。

我不明白这意味着什么。 如果有人能够解释为什么我们在程序中不使用这些参数,我会很高兴。 为什么不只是: int main()

是程序的名称的要素之一*argv[]argc是参数的数量的计数*argv[] 发送给*argv[]的其他参数是什么? 我们如何发送它们?


这些参数argcargvmain被用作一种方式发送参数的程序时,可能最熟悉的方式是使用好醇”终端,其中一个用户可以输入cat file 。 这里的单词cat是一个程序,它接收一个文件并将其输出到标准输出( stdout )。

程序接收的参数的数目argc和在参数的矢量argv ,在上述的精氨酸 umentÇ'mount将两(程序名称计数作为第一个参数)和ARG ument v厄克托将包含[ catfile ,空值]。 而最后一个元素是空指针。

通常,你会这样写:

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其中包含了程序ENV ironment变量的载体。 存在main函数参数列表的更多变体,但我不会在这里详细说明它,因为它是非标准的。

而且,变量的命名是一个惯例,并没有实际意义。 坚持这一点总是一个好主意,这样你就不会混淆他人,但将main定义为同样有效

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

对于第二个问题,有几种方法可以向程序发送参数。 我建议你看看POSIX标准的exec*()系列函数,但使用system ("command arg1 arg2")可能更容易 ,但system()的使用通常被忽视不保证在每个系统上工作。 我没有自己测试过; 但如果在* NIX系统上没有安装bashzsh或其他shell, system()将会失败。


这些是用于在程序被调用时将参数传递给你的程序,例如从命令行

$ 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 = %dn", argc );
    for( int i = 0; i < argc; ++i ) {
        printf( "argv[ %d ] = %sn", 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()链接)]


使用argc (参数计数)和argv (参数向量),您可以获取应用程序启动时传递的参数的数量和值。

这样,当你的应用程序开始采取不同的方式时,你可以使用参数(例如-version )。

但是你也可以在C中使用int main(void)作为原型。

还有第三个(不太知名的和非标准的)原型,第三个参数是envp 。 它包含环境变量。


资源:

  • 维基百科 - 主要功能,C和C ++
  • 链接地址: http://www.djcxy.com/p/72179.html

    上一篇: Regarding 'main(int argc, char *argv[])'

    下一篇: Why do pthreads’ condition variable functions require a mutex?