gpt4 book ai didi

具有选项的命令行参数

转载 作者:行者123 更新时间:2023-11-30 18:46:50 25 4
gpt4 key购买 nike

所以我必须编写一个程序,其中包含两个可能的选项,具体取决于用户通过输入 -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;
}

它不打印任何内容...任何解释将不胜感激。我只是想理解这背后的逻辑。

最佳答案

首先,您正在将橙子与苹果进行比较。 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,这将产生 undefined传递给 strcmp 时的行为。这就是为什么我只在以下情况下才执行 strcmp100% 确定 argv[1] 不是 NULL

此外,如果您正在为 POSIX 系统(linux、mac 等)编码,那么我建议使用 getopt用于解析命令行参数。

关于具有选项的命令行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49991093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com