C++ 要解析为整数值的命令行参数
我有以下代码:C++ 要解析为整数值的命令行参数,c++,string,char,command,integer,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个字符,并将其存储在整数变量中(将字符转换为整数)
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个字符,并将其存储在整数变量中(将字符转换为整数)
那么,我如何实现这些目标:
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;
}
但它显示的是“调试断言错误”
token1[1]不是正确的语句。我这样说是因为当我尝试执行下面的行时,它也显示了调试错误
MessageBox(NULL, LPCSTR(token1[1]), _T("test"), NULL);
解决之道在于
您可以为此使用
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
文档)。如果您确定字符串总是两个字符,可以使用
int val = 10 * (token1[1] - '0') + (token1[2] - '0');
如果不总是两位数,请使用
\u ttoi(常量字符*)
要在从token1
中提取正确的字符串后获取值,调用MessageBox
@user3048644时不应涉及强制转换-请告诉您,如果您使用Unicode字符集构建程序,代码将无法编译。我已删除MessageBox中的强制转换。我使用了多个字符集-character byte setIt在构建程序时未显示任何错误。但在运行程序时,它弹出一个对话框,显示“调试断言失败”