所以我必须编写一个程序,其中包含两个可能的选项,具体取决于用户选择的方式,输入-i或-w。我对命令行参数一般都很新,我不知道如何做到这一点。到目前为止,我有:
#include <stdio.h>
int main(int argc, char *argv[])
{
if(argc == -'i') {
puts("Test 1");
}
else if(argc == -'w') {
puts("Test 2");
}
return 0;
}
它没有打印任何东西...... 非常感谢任何解释。我只是想了解这背后的逻辑。
答案 0 :(得分:1)
你必须检查argv [i],其中i是要放入的命令行参数的数组编号,argv [0]将是调用的文件名,之后argv [1]将是第一个语句, argv [2]下一个等等
答案 1 :(得分:1)
首先,您要将橙子与appels进行比较。 argc
存储的数量
参数。其次,即使你使用argv[1]
,比较仍然是
错了,因为它会比较指针,而不是内容。请注意,在C中
字符串是一个字符序列,终止于'\0'
- 终止字节。
char*
变量仅指向该序列的开头。 ==
运算符
在指针(和字符串文字)的情况下检查值是否相等
比较两个指针是否指向同一位置。
当你想比较字符串时,你必须比较字符串本身,
这意味着你必须比较指针所指向的内容。
对于字符串,您必须使用strcmp
函数,如下所示:
#include <stdio.h>
int main(int argc, char *argv[])
{
if(argc != 2)
{
fprintf(stderr, "usage: %s option\n", argv[0]);
return 1;
}
if(strcmp(argv[1], "-i") == 0)
puts("Test 1");
else if(strcmp(argv[1], "-w") == 0)
puts("Test 2");
else {
fprintf(stderr, "Invalid option '%s'\n", argv[1]);
return 1;
}
return 0;
}
请注意,首先检查您是否有足够的命令行非常重要
参数(我的代码的第一个if
)。如果用户没有传递任何参数,
argc
将为1,argv[1]
将指向NULL
,这将产生未定义
行为如果传递给strcmp
。这就是为什么我只做strcmp
的原因
100%确定argv[1]
不是NULL
。
此外,如果您正在为POSIX系统(linux,mac等)编码,那么我建议使用
getopt
用于解析命令行参数。
答案 2 :(得分:0)
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("The name of the program is %s\n", argv[0]);
if( strcmp(argv[1], "-i") == 0 ) { puts("Test 1"); }
if( strcmp(argv[1], "-w") == 0 ) { puts("Test 2"); }
return 0;
}
答案 3 :(得分:0)
argc
表示&#34;参数计数&#34;。意思是参数的数量
argv
是一个二维数组。字符串是C中的一维字符数组。第二个维度来自你有多个字符串。
因此,如果您需要第一个String参数,则可以按如下方式访问它:
argv[0]
您还尝试比较长度超过1个字符的字符串。您应该使用strcmp
来比较C中的字符串。请参阅How do I properly compare strings?
如果您想比较相等,则不会使用==
,==
适用于基本数据类型,例如int
或char
。
答案 4 :(得分:0)
argc表示在命令行传递的参数数量,包括程序名称本身。
在c中,字符,例如'i'
是表示字母i的ASCII码的8位数字。所以你的条件语句if(argc == -'i')
实际上是在检查-105(105是字母i的ascii值)是否是传递给你的程序的参数数量。
要检查传入的参数是"-i"
还是"-w"
,您需要使用c库函数或您自己的算法执行字符串比较,并且需要将这些字符串与{{{ 1}}(其中i是您在程序调用中检查的参数的位置)