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