分隔空字节分隔的UNICODE C字符串

时间:2010-04-11 01:41:04

标签: c winapi char wchar-t

首先,这不是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。

1 个答案:

答案 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*以使用它。