1

I was messing around with projects in C/C++ and I noticed this:

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;
}

So I've always sort of wondered about this, what exactly do those default arguments do in C/C++ under int main? I know that the application will still compile without them, but what purpose do they serve?

4

4 回答 4

10

它们保存在命令行上传递给程序的参数。例如,如果我有程序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;
}
于 2013-06-11T13:39:19.223 回答
3

如果要通过命令行接受参数,则需要在主函数中使用参数。argc 是参数计数,字符指针数组列出参数。参考这个链接http://www.cprogramming.com/tutorial/c/lesson14.html

于 2013-06-11T13:41:12.867 回答
2

这些用于命令行参数。argc是参数的数量,参数存储为以空字符结尾的字符串数组 ( argv)。通常,一个没有传入命令行参数的程序仍然会在argv;中存储一个。即,用于执行程序的名称(它并不总是存在,取决于程序的执行方式,但我不记得具体情况如何)。

于 2013-06-11T13:39:14.427 回答
2

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

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

于 2013-06-11T13:39:35.683 回答