具有选项的命令行参数

标签 c command-line

所以我必须编写一个程序,其中包含两个可能的选项,具体取决于用户通过输入 -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 时的行为。这就是为什么我只在以下情况下才执行 strcmp 100% 确定 argv[1] 不是 NULL

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

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

相关文章:

c++ - 不使用 ASCII 将 int 转换为 char

authentication - 更改用于 TF 命令行的登录帐户

command-line - 如何通过命令行将 WOFF 转换为 TTF/OTF?

php - 有没有一种简单的方法可以在命令行中本地设置断点并调试 PHP 脚本?

command-line - CMD.exe 替换

c - 在opencv中显示图像

c++ - 编码 x264(libx264) 原始 yuv 帧数据

c - C 中的 UDP 套接字编程,调用 recvfrom() 后 printf 不工作?

matlab - 使用 Matlab 将日志语句写入标准输出

c - If语句和顺序执行