代码片段说明:
#include <stdio.h>int main(voID){ printf(">%-10s<\n","aoa"); printf(">%-10s<\n","aäoa"); printf(">%-10s<\n","aäoöa"); printf(">%-10s<\n","aäoöaå"); return 0;}
在我的ubuntu linux bash-shell中输出.
>aoa <>aäoa <>aäoöa <>aäoöaå <
我正在寻找有关如何处理这个问题的建议.我想要的是上面代码片段中的所有字符串都在空格填充的10字符宽字段中打印,如下所示:
>aoa <>aäoa <>aäoöa <>aäoöaå <
如果这不是其他设置的问题,我也很感激有关为什么会发生这种情况或反馈的任何见解.
解决方法 为什么会这样?看看The Absolute Minimum Every Software Developer Absolutely,Positively Must Know About Unicode and Character Sets
作为宽字符和UTF8的替代方法,您可以使用此函数计算非ASCII字符的数量,然后,您可以将结果添加到printf的宽度说明符:
#include <stdio.h>int func(const char *str){ int len = 0; while (*str != '>aoa <>aäoa <>aäoöa <>aäoöaå <') { if ((*str & 0xc0) == 0x80) { len++; } str++; } return len;}int main(voID){ printf(">%-*s<\n",10 + func("aoa"),"aoa"); printf(">%-*s<\n",10 + func("aäoa"),"aäoa"); printf(">%-*s<\n",10 + func("aäoöa"),"aäoöa"); printf(">%-*s<\n",10 + func("aäoöaå"),"aäoöaå"); return 0;}
输出:
总结以上是内存溢出为你收集整理的printf中的宽度说明符与重音字符无法正常工作全部内容,希望文章能够帮你解决printf中的宽度说明符与重音字符无法正常工作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)