gpt4 book ai didi

c++ - WinMain 参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:49:39 27 4
gpt4 key购买 nike

我的问题是参数只检索每个参数中的第一个字母,为此我不知道为什么..有人可以详细说明吗?

#include <Windows.h>
#include <string>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hpInstance, LPSTR nCmdLine, int iCmdShow){

LPWSTR *szArglist;
int nArgs = 0;
szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
std::string a;
for(int i=0; i<nArgs; i++){
a += (LPCSTR)szArglist[i];
}

MessageBox(NULL, (LPCSTR)a.c_str(), (LPCSTR)a.c_str(), MB_OK);

LocalFree(szArglist);
return 0;
}

我认为问题在于 CommandLineToArgvW(GetCommandLineW(), &nArgs);

最佳答案

LPWSTR 类型定义为wchar_t *szArglistwchar_t * 的数组。一个宽字符是 2 个字节而不是 1 个字节,因此一个字母可以表示为:

0x0038 0x0000

但是,如果您使用这些字节并说“嘿,假装我是一个 char *,这看起来像一个带有一个字母 (0x0038) 的 C 字符串,因为第二个字符 (0x0000 ) 为 null,在 C 风格的字符串中表示字符串的结尾。

您遇到的问题是您试图将宽字符 (wchar_t) 放入非宽字符 (char) 字符串中,这是一个复杂得多的操作.

解决方案:要么到处使用 wstring/wchar_t(对应于 LPWSTR/LPCWSTR),要么到处使用 string/char(我相信对应于 LPSTR 和 LPCSTR)。请注意,“使用 unicode”的项目设置应符合您的决定。尽量不要混用!

关于c++ - WinMain 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17886846/

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