gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:20:45 26 4
gpt4 key购买 nike

我必须解析命令行参数并将某些字符转换为整数。

我有以下代码:

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

//char *str = "+10 frogs";
TCHAR *endptr =" ";

long n = strtol(token1 + 1, &endptr, 0);

if (!*endptr)
MessageBox(NULL, "No error", _T("test"), NULL);
else
MessageBox(NULL, "error", _T("test"), NULL);

当在命令提示符下发送命令“WesOPC.exe +10 -regserver”时,消息框显示“+10 -regserver”。

我需要将 10 存储为整数。因此,我使用了 strtol,但显示了错误消息框。

当我尝试调试它时,在行看到错误

long n = strtol(token1 + 1, &endptr, 0);

Unhandled exception at 0x0042d368 in WesOPC.exe: 0xC0000005: Access violation reading location 0x00000001.

'n' 应该是 10

最佳答案

您正在内存地址 0x00000001 处获取 AV。您正在向 token1 添加 1。这意味着 token1 为 NULL,但您的代码未检查该条件。事实上,在那种情况下,您第一次调用 MessageBox() 应该会显示一个空字符串。

另一个问题是您在同一代码中将 char*wchar_t*TCHAR* 混合在一起。 token1 使用 TCHAR*L'+' 使用 wchar_tstrchr() 需要 char*char。您的代码甚至不应该按原样编译。停止将数据类型混合在一起,选择一种类型来处理所有事情。

试试这个:

// where cmd_line is TCHAR*...
TCHAR *token1 = _tcschr(cmd_line, _T('+'));
if (token1)
{
MessageBox(NULL, token1, TEXT("test"), NULL);

//char *str = "+10 frogs";
TCHAR *endptr = " ";

++token1;
long n = _tcstol(token1, &endptr, 0);

if ((n == 0) && (endptr == token1))
MessageBox(NULL, TEXT("error"), TEXT("test"), NULL);
else
MessageBox(NULL, TEXT("No error"), TEXT("test"), NULL);
}
else
MessageBox(NULL, TEXT("param not found"), TEXT("test"), NULL);

或者,停止支持 Ansi 并在所有内容上使用完整的 Unicode:

// where cmd_line is LPWSTR...
LPWSTR token1 = wcschr(cmd_line, L'+');
if (token1)
{
MessageBoxW(NULL, token1, L"test", NULL);

//char *str = "+10 frogs";
LPWSTR *endptr = L" ";

++token1;
long n = wcstol(token1, &endptr, 0);

if ((n == 0) && (endptr == token1))
MessageBoxW(NULL, L"error", L"test", NULL);
else
MessageBoxW(NULL, L"No error", L"test", NULL);
}
else
MessageBoxW(NULL, L"param not found", L"test", NULL);

关于c - 在 Win32 API 中从命令行解析的字符的未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21769770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com