C++如何从命令行参数获取LPWSTR*类型的argv而非char**类型
解决方案
方案1:使用Windows特有的宽字符入口函数(推荐)
Windows平台下可以直接使用wmain替换标准main作为程序入口,直接获取宽字符类型的参数数组:
#include <windows.h> int wmain(int argc, LPWSTR argv[]) { // 此处argv本身就是LPWSTR*类型,无需额外转换 LPWSTR targetParam = argv[1]; // 可直接传入要求LPWSTR入参的函数 return 0; }
使用该方案需确保编译器字符集设置为Unicode,微软Visual Studio等Windows平台开发工具默认已开启该配置。
方案2:标准main入口手动转换编码
如果需要保留标准char** argv的入口形式,可以使用Windows API MultiByteToWideChar完成多字节字符串到宽字符串的转换:
#include <windows.h> int main(int argc, char** argv) { // 示例:转换所有参数生成LPWSTR*类型数组 LPWSTR* wArgv = new LPWSTR[argc]; for (int i = 0; i < argc; i++) { int wideLen = MultiByteToWideChar(CP_ACP, 0, argv[i], -1, NULL, 0); wArgv[i] = new WCHAR[wideLen]; MultiByteToWideChar(CP_ACP, 0, argv[i], -1, wArgv[i], wideLen); } // 此处wArgv就是LPWSTR*类型,可直接使用 LPWSTR targetParam = wArgv[1]; // 使用完毕释放内存避免泄漏 for (int i = 0; i < argc; i++) { delete[] wArgv[i]; } delete[] wArgv; return 0; }
内容的提问来源于stack exchange,提问作者Ohav
相关产品推荐
相关产品推荐

