我得到 argv 作为 wchar_t**(见下文),因为我需要使用 unicode,但我需要将其转换为 char **。我怎样才能做到这一点?
int wmain(int argc, wchar_t** argv)
{
有不止一种方法可以做到这一点。根据您的环境和可用的编译器/标准库/其他库,您至少有三个选择:
你真的需要进行转换吗?
您应该意识到通常(尤其是在 Windows 上)从 wchar_t 字符串到 char 字符串的转换是有损转换。系统用于 char 字符串的字符集通常不是 UTF-8。例如,如果您将带有国家字符或某些亚洲语言的文件名转换为字符字符串,您很可能会得到一些无法真正用于访问原始文件的内容。
这可以解决问题:
#define MAXLEN 512
char tx[MAXLEN];
mbstowcs(argv[i], tx, MAXLEN);
为什么需要转换?在大多数情况下,您需要更改项目设置,因此所有内容都接受宽字符。如果第三方库需要非 Unicode 字符串,那么您需要使用适当的 Unicode 选项重新编译它。如果 Unicode 没有合适的选项,我会摆脱这个库并找到(编写)一个更好的库。