C语言中main方法中参数的用途是什么?

时间:2014-05-28 20:22:36

标签: c arguments

我正在学习C并注意到,如果对于简单的程序(比如打印某些东西或其他简单的东西),即使我删除了主程序中的参数,它仍然可以工作,但是我所关注的书将这些参数放在每个程序中。

#include <stdio.h>

int main(int argc, char const *argv[])
// even works if i do int main() 
{
/* write your code here */

return 0;
}

我想了解这些论点的原因,为什么我们把它们和它们用于什么?也许指出一个程序的例子,如果我们从main函数中删除这些参数并指出它们的目的是什么,那么程序将无法工作?

7 个答案:

答案 0 :(得分:8)

主要的签名是:

int main(int argc, char **argv);

其中argc是传入的命令行参数的数量,包括用户调用的程序的实际名称。

argv包含实际参数,从索引1开始,因为索引0是程序名称。

所以,如果你运行这样的程序:

./program hello world

然后:

argc将是3

argv[0]将是./program

argv[1]将是hello

argv[2]将是world

我希望这对你来说足够清楚了。

如果您想更清楚地了解它,请转到:LinkLink

答案 1 :(得分:2)

C中main的允许定义是:

int main(void) { /* ... */ }
int main(int argc, char *argv[]) { /* ... */ }

如果您不在程序中使用argcargv参数,则可以使用第一个定义。这些参数用于检索参数的数量(argc)及其内容(argv),以防您在命令行中使用参数调用程序。

例如:

./a.out argument1 argument2

argc的值为3,而argv对象就好像这样定义:

char *argv[] = {"./a.out", "argument1", "argument2", NULL};

答案 2 :(得分:1)

执行程序时,传递给C中main方法的参数来自命令行。

使用命令行参数作为将输入信息从用户传递到程序的机制时,可以添加它们。

如果没有命令行参数并且什么也没有传递,程序仍然可以工作。在这种情况下,代码必须从另一个源获取所有输入信息(例如,从文件中读取)。

答案 3 :(得分:1)

主函数的参数是您在命令行上键入的程序,以便程序执行。我们一个一个地看看它们。

int argc:参数count的缩写,这是argv数组中第二个参数的C字符串数。

char *argv[]:这是字符串数组。第一个字符串是编译程序时生成的二进制可执行文件的名称。其余的字符串是该程序的参数。

所以,时间是一个例子。遵循简单的程序(让我们称之为 add )将两个整数作为命令行参数,打印它们的总和并退出。为了保持这一点,该程序执行最少的错误检查。

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
    int a, b, sum;

    if(argc != 3) // program name + the two arguments
    {
        return -1;
    }
    a = atoi(argv[1]);
    b = atoi(argv[2]);
    sum = a + b;

    printf("Sum is: %d\n", sum);

    return 0;
}

编译时,可以使用以下命令执行该程序:

$ ./add 25 31

其中:argv[0] 添加        argv[1] 25        argv[2] 31 argc是3

没有参数的主方法如何工作?

不需要命令行参数argcargv。所以你可以完美地拥有这样的程序:

int main()
{
    // other code here...
    return 0;
}

只需要将程序中的一个方法命名为main(使用两个已识别的签名之一:int main()int main(int argc, char *argv[]))。运行程序的操作系统将找到该方法并从那里开始执行程序(尽管程序的实际起点是不同的系统定义例程)。

答案 4 :(得分:1)

与任何函数参数一样,目的不是使调用代码工作,而是提供被调用函数需要的数据才能正常运行。

对于main函数,调用环境告诉程序在命令行上给出了哪些选项。具体来说,第一个参数(传统上将argc命名为&#34;参数计数&#34;)是多少&#34;字&#34;包含的命令,第二个(argv,对于&#34;参数向量&#34;),是该长度的数组(向量),包含单词本身作为标准的以空字符结尾的字符串。

因此,当您键入&#34; rm -rf /&#34;时,rm程序会收到argc的3,以及argv包含&#34; rm& #34;,&#34; -rf&#34;和&#34; /&#34;。然后,它可以解释这些参数,以便知道您要删除整个系统上的所有内容。

传递命令本身的名称可能看起来很奇怪,但实际上相当有用。例如,true命令的工作是&#34;什么也不做,成功&#34; (立即退出状态为0),而false应该&#34;什么都不做,不成功&#34; (以0以外的状态退出)。这些都可以使用符号链接指向同一个程序,并且该程序可以根据argv[0]的值来决定是否成功。

更详细的示例是编辑器vim,可以通过使用view(只读),vimdiff等名称调用它来启动各种默认选项(比较两个)文件并排),rvim(限制模式),ex(模拟更简单的前任),依此类推。这些选项以及更多选项也可以指定为额外的参数,因此可能有很多代码只是&#34;阅读&#34; argv

由于您并不总是关心使用了哪些参数,因此允许定义没有参数的main。然后将忽略命令行上的参数,并且您的命令将只运行。

答案 5 :(得分:0)

因此,您可以在从命令行调用程序时传递参数。想象一下任何接收参数的命令行工具,例如rm用于删除文件,通常你喜欢这样:

$ rm file1

所以,如果二进制文件是&#34; rm&#34;,&#34; file1&#34;将是第一个参数。所以argc值增加1(这是知道有多少参数传递给二进制文件的方法),而argv [1]包含字符串&#34; file1&#34;。

您可以想象在调用时接收任何参数的任何其他二进制文件。

答案 6 :(得分:0)

从命令行执行程序时使用它们。 argc具有参数的数量,而argv是字符串形式的单个参数