wprintf 生成的列不相等

标签 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 

最佳答案

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

如果您的目标是符合 POSIX 的实现,您也许可以使用 wcswidth(3)功能:是专门为了解决这类问题而指定的(原来是CJKV字符),不过级别有点低。

关于wprintf 生成的列不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29172044/

相关文章:

c - C中的点WORD类型是什么?

c - 命名管道不会在 C 程序中打开

c - x64 与 x86 中的内存处理 - C 语言

c++ - 如何避免额外的 'extern' 缩进

c++ - 如何替换 TCHAR 字符串中的字符

c++ - 将 wchar_t 转换为 int

c - 文本文件中的无效本地化字符

c - 将八进制转换为二进制的程序

lisp - Geany 作为 CommonLisp IDE

string - 如何让 bash "eat"字符串中所有行共有的缩进字符?