首页 > 解决方案 > 如何修复 printf 在 c 中使用 UTF8 和 %10s 管理字符串的方式?

问题描述

我正在尝试使用 c 和 printf 打印带有非 ASCII 字符的字符串,这是程序:

include <stdio.h>
void main(void){
  printf("<0123456789> BOTH %s\n","<%5s>");
  printf("<%5s>\n"," w ");
  printf("<%5s>\n"," δ ");
}

我得到

<0123456789> BOTH <%5s>
<   w >
<  δ >

所以字符串的大小有问题。如何获得相同大小的两个字符串?

标签: cstringutf-8printfsize

解决方案


您的小写 delta 字符不是 8 位值。它由两个字节表示,因此使用宽度说明符 5 打印它会导致它仅在 4 个可见空间中打印。您可以在其他希腊字母中看到同样的问题。

strlen(" δ ")您可以通过打印which prints的结果来进一步了解这一点4


推荐阅读