一、简介

在平时的使用中,会经常使用到printf进行打印,而最长使用的方式是printf(“%s”,string)进行打印。但是有个问题,如果string结尾不是0。那么printf会继续打印,直到遇到0为止。这样就会有内存溢出的风险。显然,这种是不符合预期的。所以,此时就需要%*s出来帮忙了。

二、功能介绍

printf(“%s”,string)

打印字符串,遇到0停止

printf(“%*s”,10,string)或printf(“%10s”,string)

打印字符串,至少占用10个字节。如果不够,则在左侧补0,如果超过10个,则按实际长度

printf(“%.*s”,10,string)或printf(“%.10s”,string)

打印字符串,最多占10个字节。如果不够,则按实际长度,如果超过10个,则只打印10个

printf(“%-*s”,10,string)或printf(“%-10s”,string)

打印字符串,至少占用10个字节,如果不够,则在右侧补0,如果超过10个,则按实际长度。

注:%-s只是改变了对齐的方向。正常是右对齐,加上“-”后,为左对齐。

三、实例

见如下代码,这里我们分别以%*s、%.*s和%-*s三种方式进行打印。

char *string1 = "this is a test string";uint8_t len = strlen(string1);printf("len:%d,%s\r\n",len,string1);printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n");printf("%15s|\r\n%*s|\r\n%-30s|\r\n",string1,30,string1,string1);printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n");printf("%.15s|\r\n%.*s|\r\n%-.30s|\r\n",string1,30,string1,string1);printf(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\r\n");

看结果:

可以看到,要打印的字符串长度为21字节%*s打印,如果要打印的长度大于设置的长度,则打印实际长度。而%.*s打印,如果要打印的长度大于设置的长度,则只打印设置的长度。而%-*s只是将右对齐改变成了左对齐