wprintf生成的列不相等

时间:2015-03-20 17:03:17

标签: c indentation wchar-t

我使用wprintf打印出不同大小的c字符串。

wprintf(L"%-*.*ls ", PRINTED_WORD_LENGTH, PRINTED_WORD_LENGTH, word->string);
int i;
for (i = 0; i < word->usage_length; i++) {
    printf("%d ", word->usage[i]);
}
printf("\n");

如您所见,这些字符串包含一些变音字符。具有这些字符的行没有正确格式化(wprintf在遇到它们时没有使用足够的空格)。有没有办法在不编写新函数的情况下正确格式化行?

z                                39 46 62 113 
za                               101 105 
zabawa                           132 
zasną                           123 
zatrzymać                       88 

1 个答案:

答案 0 :(得分:0)

它们在字节级别正确地对齐。只是因为您将其视为UTF-8多字节字符会让您感觉它们没有正确对齐(对于您要使用的文本对齐的任何定义。)

如果您的目标是符合POSIX的实现,您可以使用wcswidth(3)函数:它是故意指定来解决这类问题(最初使用CJKV字符。)虽然它有点低级但是