命令行要解析为整数值的参数

时间:2014-02-13 06:39:34

标签: c++ string char command integer

我有以下代码:

TCHAR *cmd_line = GetCommandLine();
TCHAR *token1;
token1 = strchr(cmd_line, L'+');
MessageBox(NULL,token1, _T("test"), NULL);

当我进入

WesOPC.exe +10 -regserver 

在命令提示符下,消息框显示为

"+10 -regserver".

现在, 我需要在'+'符号(10)之后取2个字符并将其存储在整数变量中(将char转换为整数。

那么,我怎样才能实现这些目标:

  1. 将来自TChar的'+'后的2个字符存储到字符串或字符数组中,以适当的方式
  2. 将char数组或字符串转换为整数
  3. /////////////////更新代码//////////////////////////// ////

    我在上面的代码中添加了以下行来将char转换为int

    int i, value=0;
    for ( i = 0; token1 [ i ] != '\0'; ++i )
    {
      int digit = token1 [ i ] - '0';// get value of current digit character 
      value = 10 * value + digit;
    }
    

    但它显示“Debug Assertion error”。

    令牌1 [1]不是正确的陈述。我这样说是因为当我尝试跟随行时,它也显示出调试错误。

    MessageBox(NULL, LPCSTR(token1[1]), _T("test"), NULL);
    

    解决方案在

    Unhandled exception for character parsed from command line in Win32 API

2 个答案:

答案 0 :(得分:1)

您可以使用strtol。例如

const char *str = "+10 frogs";
const char *endptr;

long n = strtol(str + 1, &endptr, 0);
// now you should have n == 10 && (endptr == " frogs").

它会一直解析数字,直到找到一些不是的字符 数字的一部分。 *endptr将指向该字符。你可以用它 继续解析字符串或检测错误(请参阅strtol文档)。

答案 1 :(得分:1)

如果你确定它总是两个字符,你可以使用

int val = 10 * (token1[1] - '0') + (token1[2] - '0');

如果它不总是两位数,请使用_ttoi(const char*)token1中提取正确的字符串后获取值。