首先,这不是Turn a C string with NULL bytes into a char array的重复,因为当char *
是Unicode时,给定的答案不起作用。
我认为问题是因为我试图使用UTF-8编码的char *而不是ASCII char *,并且每个字符的长度不同,因此,这不起作用:
char *Buffer; // your null-separated strings
char *Current; // Pointer to the current string
// [...]
for (Current = Buffer; *Current; Current += strlen(Current) + 1)
printf("GetOpenFileName returned: %s\n", Current);
有没有人有类似的解决方案适用于Unicode字符串?
我现在已经在这上面打了4个多小时了。 C不同意我的意见。
编辑:我认为问题是char *现在是UTF-8而不是ASCII。
答案 0 :(得分:2)
请勿使用char*
。使用wchar_t*
和相关功能
wchar_t *Buffer; // your null-separated strings
wchar_t *Current; // Pointer to the current string
// [...]
for (Current = Buffer; *Current; Current += wstrlen(Current) + 1)
wprintf(L"GetOpenFileName returned: %s\n", Current);
顺便说一句,wchar_t在Windows上是16位,而不是可变宽度。如果您的源数据是UTF8编码为char*
,则应首先将其转换为wchar_t*
以使用它。