命令行解析:如何将字符串解析为参数

问题描述 投票:0回答:2

我试图解析一个命令行参数,该参数将在case语句中执行关联的switch。当我解析一个整数参数时(如下面的代码所示),关联的case正确执行。当我尝试解析诸如“CPU”之类的字符串时,我没有得到正确的输出。

函数代码(解析整数,例如qazxsw poi的参数,给出了qazxsw poi的正确输出):

4

我试图解析一个字符串,例如argumenthello

#include <stdio.h>

int main(int argc, char *argv[]) {

    char execution_mode = atoi (argv[1]);

    switch (execution_mode)
    { 
    case (4) : 
        printf("Hello");
        getchar();
        break;
    case (8) :
        printf("Goodbye");
        getchar();
        break;
    default:
        printf("Error! execution mode is not correct");
        getchar();
        break;
    }

    return 0;
}
c parsing cmd switch-statement arguments
2个回答
1
投票

您不能将字符串转换为这样的枚举。你正在做的只是将指向字符串的指针转换为CPU。哪个失败了。

一个替代方案(除了比较第一个参数与#include <stdio.h> int main(int argc, char *argv[]) { typedef enum MODE { CPU, OPENMP } MODE; MODE execution_mode = (char)argv[1]; switch (execution_mode) { case (CPU) : printf("Hello"); getchar(); break; case (OPENMP) : printf("Goodbye"); getchar(); break; default: printf("Error! execution mode is not correct"); getchar(); break; } return 0; } )以避免这种情况将为您的枚举赋予一个字符值:

char

现在你可以选择第一个参数的第一个字母并转换它:

strcmp

这些字母当然必须完全不同。当然,检查typedef enum { CPU='C', OPENMP='O' } MODE; 以查看MODE execution_mode = (MODE)argv[1][0]; 是否有效

如果你想要完整的字符串匹配,除了使用argc>1之外别无选择:

argv[1]

0
投票

在回答了这个问题的用户的帮助下,我找到了一个使用strcmp的工作解决方案,如下所示。我还添加了一些错误检查,以确保在命令行上输入了足够的参数。

const char *execution_mode = argv[1];

if (strcmp(execution_mode,"CPU")==0)
{ 
  // do something
}
else if (strcmp(execution_mode,"OPENMP")==0)
{
  // do something else
}
© www.soinside.com 2019 - 2024. All rights reserved.