将数组元素传递给消息框只打印元素的第一个字符,而不是整个字符串 我最近开始使用VisualC++,我正在努力处理处理参数的问题。我试图使用命令行toargvw()创建一个参数数组,但将数组中的值传递给消息框时,只打印第一个字符,而不打印整个字符串。例如,如果我使用ProjectName.exe test abc 123运行程序,我将得到4个消息框,分别显示“P”、“t”、“a”和“1”。我做错了什么 int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR lpCmdLine, int show) { int argNum, i; LPWSTR *argList; argList = CommandLineToArgvW(GetCommandLineW(), &argNum); if (NULL == argList) { wprintf(L"CommandLineToArgvW failed\n"); return 0; } else { for (i = 0; i < argNum; i++) { int msgboxID2 = MessageBox( NULL, (LPCSTR)argList[i], (LPCSTR)"Arguments", MB_OK ); } } return 0; } int-WINAPI-WinMain(HINSTANCE-inst、HINSTANCE-prev、LPSTR-lpCmdLine、int-show){ int argNum,i; LPWSTR*argList; argList=CommandLineToArgvW(GetCommandLineW(),&argNum); if(NULL==argList) { wprintf(L“命令行到argvw失败\n”); 返回0; } 其他的 { 对于(i=0;i

将数组元素传递给消息框只打印元素的第一个字符,而不是整个字符串 我最近开始使用VisualC++,我正在努力处理处理参数的问题。我试图使用命令行toargvw()创建一个参数数组,但将数组中的值传递给消息框时,只打印第一个字符,而不打印整个字符串。例如,如果我使用ProjectName.exe test abc 123运行程序,我将得到4个消息框,分别显示“P”、“t”、“a”和“1”。我做错了什么 int WINAPI WinMain(HINSTANCE inst, HINSTANCE prev, LPSTR lpCmdLine, int show) { int argNum, i; LPWSTR *argList; argList = CommandLineToArgvW(GetCommandLineW(), &argNum); if (NULL == argList) { wprintf(L"CommandLineToArgvW failed\n"); return 0; } else { for (i = 0; i < argNum; i++) { int msgboxID2 = MessageBox( NULL, (LPCSTR)argList[i], (LPCSTR)"Arguments", MB_OK ); } } return 0; } int-WINAPI-WinMain(HINSTANCE-inst、HINSTANCE-prev、LPSTR-lpCmdLine、int-show){ int argNum,i; LPWSTR*argList; argList=CommandLineToArgvW(GetCommandLineW(),&argNum); if(NULL==argList) { wprintf(L“命令行到argvw失败\n”); 返回0; } 其他的 { 对于(i=0;i,c++,arrays,visual-c++,messagebox,C++,Arrays,Visual C++,Messagebox,将MessageBoxW()与(LPCWSTR)变量一起使用,效果非常好。当不使用宽字符串版本时,该字符在截断字符串的初始字符后与0配对(感谢Freenode上的ville###c++-general帮助我并解释了这个问题,即使他不使用Windows).这是一个例子,在这个例子中,通过强制转换来消除编译器错误会让您陷入深深的麻烦。真正的问题是,您最初是从哪里想到强制转换的?此外,尽管在这种情况下你不应该使用特定C++的演员,而不是所有不安全的C演员。(我怀疑我在与Win32 API进行代码链接时

将MessageBoxW()与(LPCWSTR)变量一起使用,效果非常好。当不使用宽字符串版本时,该字符在截断字符串的初始字符后与0配对(感谢Freenode上的ville###c++-general帮助我并解释了这个问题,即使他不使用Windows).

这是一个例子,在这个例子中,通过强制转换来消除编译器错误会让您陷入深深的麻烦。真正的问题是,您最初是从哪里想到强制转换的?此外,尽管在这种情况下你不应该使用特定C++的演员,而不是所有不安全的C演员。(我怀疑我在与Win32 API进行代码链接时鼓吹好的风格是一场失败的战斗,但无论如何!)@drescherjm哦,好吧,我明白了。@下划线\u d我12小时前才开始使用VC++,所以我刚刚从一堆不同的网站上找到了代码。一旦我真的知道自己在做什么,我就完全打算清理代码。@TaylorRose我知道它是怎么回事,但现在回想起来,最好是花额外的时间/单调的时间来理解你正在键入的内容(而不是粘贴!),并在第一时间就把它做好。通过混淆从不同来源粘贴的代码,您有很高的机会理解更少而冒更多的风险。我去过那里,我认识的几个人也去过那里(例如,我不得不解开/修复“谁的”代码)。