具有选项的命令行参数

时间:2018-04-23 23:03:18

标签: 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;
}

它没有打印任何东西...... 非常感谢任何解释。我只是想了解这背后的逻辑。

5 个答案:

答案 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?

如果您想比较相等,则不会使用====适用于基本数据类型,例如intchar

答案 4 :(得分:0)

argc表示在命令行传递的参数数量,包括程序名称本身。

在c中,字符,例如'i'是表示字母i的ASCII码的8位数字。所以你的条件语句if(argc == -'i')实际上是在检查-105(105是字母i的ascii值)是否是传递给你的程序的参数数量。

要检查传入的参数是"-i"还是"-w",您需要使用c库函数或您自己的算法执行字符串比较,并且需要将这些字符串与{{{ 1}}(其中i是您在程序调用中检查的参数的位置)