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

Command line Argument to be parsed as integer value

本文关键字:参数 整数 命令行      更新时间:2023-10-16

我有以下代码:

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 个字符并将其存储在整数变量中(将字符转换为整数。

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

  1. 将 TChar 中的"+"后面的 2 个字符存储到字符串或字符数组中,以合适的为准
  2. 将 char 数组或字符串转换为整数
//

/

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

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

但它显示"调试断言错误"。

令牌1[1]不是一个正确的陈述吗?我之所以这样说,是因为当我尝试遵循行时,它也显示了调试错误。

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

解决方案在

在 Win32 API 中从命令行分析的字符的未处理异常

如果您确定它始终是两个字符,则可以使用

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

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

您可以使用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文档)。