C/C ++中的默认int main参数

4

我在C/C++项目中进行实验时注意到以下内容:

C ++

#include <iostream.h>

int main (int argc, const char * argv[]) {
    // insert code here...
    cout << "Hello, World!\n";
    return 0;
}

and

C

#include <stdio.h>

int main (int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    return 0;
}

我一直想知道在C/C++的int main函数中,那些默认参数到底是做什么用的?虽然不加这些参数也能编译应用程序,但它们到底有何作用呢?


3
它们提供了访问程序所接收的命令行参数的方式。 - Joe
4
例如,参见https://dev59.com/JXA75IYBdhLWcg3w794Y该语句声明了一个int类型的变量argc和一个指向char型的指针变量argv。它们通常用于表示传递给程序的命令行参数。 - Fredrik Pihl
1
@mwerschy:char*[]char**都是有效的。 - md5
@Kirilenko 哦,好的 :) 我不知道 C 允许那样做。 - mwerschy
就此而言,“c”和“c ++”标准引用:http://pastebin.com/erHUd4Gn - BoBTFish
显示剩余4条评论
4个回答

11

它们保存传递给程序的命令行参数。例如,如果我有程序a.out并像这样调用它:

$ ./a.out arg1 arg2 
argv的内容将是一个字符串数组,包含以下内容:
  1. [0] "a.out" - 可执行文件名始终是第一个元素
  2. [1] "arg1" - 其他参数
  3. [2] "arg2" - 我传递的参数
argc保存了argv中的元素数量(与C语言一样,在将数组传递给函数时需要另一个变量来知道有多少个元素)。
您可以使用此简单程序自行尝试:

C++

#include <iostream>

int main(int argc, char * argv[]){
    int i;
    for(i = 0; i < argc; i++){
        std::cout << "Argument "<< i << " = " << argv[i] << std::endl;
    }
    return 0;
}
C
#include <stdio.h>

int main(int argc, char ** argv){
    int i;
    for(i = 0; i < argc; i++){
        printf("Argument %i = %s\n", i, argv[i]);
    }
    return 0;
}

我认为argv应该是argv[],因为它是一个数组。 - learner
1
在 C 语言中,数组可以退化为指针,因此 char ** argv 也是允许的。我相信 char * argv[] 更受欢迎,但我习惯于前者,因为它可以节省一个字符并且打字速度稍快。 - Kninnug

3

2

这些是用于命令行参数的。 argc 是参数的数量,并且参数被存储为以空字符结尾的字符串数组 (argv)。通常,没有传递命令行参数的程序仍然会在argv中存储一个参数;即执行程序所使用的名称(根据程序的执行方式不一定会有,但我记不清具体情况了)。


2

argcargv是在C和C++中将命令行参数传递给main()函数的方式。

argcargv指向的字符串数量,通常比您从终端传递的参数数量多一个,因为通常第一个是程序的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接