“ C中的参数”的定义是什么

时间:2019-07-19 08:18:20

标签: c startup argv cs50 argc

我在读取一行代码时遇到了一些麻烦,并且在这段代码的上下文中理解了构成参数的内容。它将保存在名为argv0.c

的文件中
#include <cs50.h>
#include <stdio.h>

int main(int argc, string argv[])
{
    if (argc == 2)
    {
        printf("hello, %s\n", argv[1]);
    }
    else
    {
        printf("hello, world\n");
    }
}

我将代码编译如下:

make argv0
./argv0

以下提示我输入的内容。问题出在这里:

  1. 如果我在终端中输入“ Dion Lim”,Dion Lim是否被视为自变量?如果是这样,是两个参数吗?

  2. 为什么在终端中输入“ Dion Lim”会得到“ Hello,World”,但是如果我输入“ Dion”会得到“ Hello,Dion”

    < / li>

4 个答案:

答案 0 :(得分:1)

Q1)是的,有两个参数。

Q2)因为argc考虑可执行文件的名称,所以它是第一个参数。所以:

./argv0 Dion Lim // argc == 3
./argv0 Diom     // argc == 2
./argv0          // argc == 1

您可以获取更多详细信息here

答案 1 :(得分:0)

  

如果我在终端中输入“ Dion Lim”,Dion Lim是否被视为   争论?如果是这样,是两个参数吗?

这当然取决于您的外壳如何处理,但通常"Dion Lim"将是一个参数,而Dion Lim(不带引号)将是两个参数。空格分隔参数,如果需要在输入中加空格,可以用引号引起来(有时您也可以转义空格,例如Dion\ Lim)。

  

为什么在终端中输入“ Dion Lim”会收到“你好,   世界”,但是如果我输入“ Dion”,我会得到“ Hello,Dion”

argc参数告诉您您有多少个参数(我认为它代表“参数计数”)。程序的名称也作为参数,因此,如果仅传递Dion,则argc将已经是2。如果您通过Dion Lim,它将是3

答案 2 :(得分:0)

要查看参数数量,请检查值argc(参数计数)。始终至少有一个输入参数,即程序名称。

因此./argv0 Dion Lim有三个输入参数。

如果您想知道make使用Makefile来编译程序,那么如果查看运行目录make所在的目录,则会发现名为Makefile的文件,其中包含编译说明。

答案 3 :(得分:0)

根据C标准(5.1.2.2.1程序启动)

  

-如果argc的值大于零,则指向的字符串   由argv [0]表示程序名称; argv [0] [0]为空   如果程序名称不能从主机获得,则为字符   环境。如果argc的值大于1,则字符串   argv [1]到argv [argc-1]所指向的代表程序   参数。

因此,如果您“手动”提供参数Dion,则argc将等于2。第一个程序参数将是程序名称(如引号后面)。程序的第二个参数将是单词Dion

如果键入Dion Lim,则主机系统会将它们视为两个程序参数,并且与程序名argc一起等于3

但是,如果将输入Dion Lim括在"Dion Lim"这样的括号中,则系统会将输入视为一个参数,并且程序将输出

hello Dion Lim