美文网首页
printf中的%.*s格式控制

printf中的%.*s格式控制

作者: LoveDuoer | 来源:发表于2020-03-23 16:13 被阅读0次
以下内容针对C语言

做软件的应该没有不知道printf函数吧!

printf("hello world !\n");

日前,看到一个奇怪的printf打印:

mqtt_log("%.*s - %.*s", len_1, chr_1, len_2, chr_2); // mqtt_log是printf的重定义

输出例子:

hello - world

我心想这是什么鬼,也不是常见的数字位数限制啊,整形变量len_1和len_2有啥用?所以我给人“优化”了:

mqtt_log("%s - %s", chr_1, chr_2);

改完也没注意,结果今天突然发现,输出的log有重复内容,比如:

helloworld - world

仔细想了想,发现了端倪。因为char型指针chr_1和chr_2是连续的内存,且chr_1最后没有字符串结束符,而chr_2有。所以打印chr_1的时候会连带chr_2的内容一块输出了,造成打印信息重复。

其实,“.*” 表示字符串输出宽度限制,这个限制量可以作为printf的参数来指定!

回到这个例子,len_1就是指定chr_1的最大长度,len_2指定chr_2的最大长度。这样,碰到没有字符串结束符的指针,就不会打印多余的数据了。

引用一句伟人说过的话提醒自己: 不懂的代码千万不要改!

相关文章

网友评论

      本文标题:printf中的%.*s格式控制

      本文链接:https://www.haomeiwen.com/subject/jvpwyhtx.html