命令行 要解析为整数值的参数
Command line Argument to be parsed as integer value
我有以下代码:
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 个字符并将其存储在整数变量中(将字符转换为整数。
那么,我怎样才能实现这些:
- 将 TChar 中的"+"后面的 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
文档)。
相关文章:
- 如何反转整数参数包
- 带有整数的变量参数列表
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 从函数参数 [C++] 复制整数数组
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 可变参数模板:将整数参数完美转发到 lambda
- (C/C++)fscanf_s从txt文件以字符形式读取数组时缺少整数参数错误
- 如何修改此函数,以便如果函数的参数是特定结构,则返回具有较大整数的结构?
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 切片整数参数包
- 将整数数组作为参数传递C++错误
- 反转模板(整数)参数的顺序
- C++ 构造函数参数:字符串、整数、整数、整数
- 如何避免字符串到整数转换情况下的无效参数异常
- 来自整数的variadic模板参数
- 模板参数中具有特殊整数的模板
- 在 lambda 中捕获参数包时,某些整数会丢失其值
- 整数模板参数和子函数调用
- 操作员与整数模板参数专业化过载
- 将方法指针作为整数参数发送到C#的C 方法