wprintf 生成的列不相等

Columns generated by wprintf are not equal

我正在使用 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 

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

如果您的目标是符合 POSIX 的实现,您或许可以使用 wcswidth(3) 函数:它专门用于解决此类问题(最初使用 CJKV 字符。)它是虽然有点低级。