printf(“% - 10s”)在系统区域设置中工作错误

时间:2012-07-11 11:45:51

标签: c utf-8 locale printf

一旦我使用

setlocale(LC_ALL, ""); //use system locale

printf函数没有正确对齐。如何在不同的区域设置中对齐字符串?

1 个答案:

答案 0 :(得分:2)

现场宽度不能用于现代多语言系统的对齐。即使printf在对齐时可以计算字符而不是字节(注意:宽printf - 族函数可以这样做),这将无法适应组合字符(通常不使用水平空格)以及CJK范围的字符(通常在终端上使用2列)。

我能想到的最好方法是首先将字符串转换为wchar_t字符串,然后使用wcswidth确定字符单元格列中的宽度。然后使用带有参数%.*sn的{​​{1}}字段说明符在字段之前或之后添加适当数量的空格,其中""是要显示的空格数。