C语言-printf打印%*s、%.*s与%-.*s的区别

一、简介

        在平时的使用中,会经常使用到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只是将右对齐改变成了左对齐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值