我在读取一行代码时遇到了一些麻烦,并且在这段代码的上下文中理解了构成参数的内容。它将保存在名为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
以下提示我输入的内容。问题出在这里:
如果我在终端中输入“ Dion Lim”,Dion Lim是否被视为自变量?如果是这样,是两个参数吗?
为什么在终端中输入“ Dion Lim”会得到“ Hello,World”,但是如果我输入“ Dion”会得到“ Hello,Dion”
< / li>答案 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