sprintf() 格式化输出函数中的格式串[%.*s]代表什么意思?

今天看一段代码,有个sprintf函数一下有点儿蒙圈了,找了一圈资料,总结如下。

 

代码是从一个字符串中截取前面指定长度子字符串,然后把尾部的空格删掉返回。

<函数测试>

void testCutTailSp(){
    char tmp[11],*org="abc d efgab  ";
    memset( tmp, '\0', sizeof(tmp) );
    cutTailSp(tmp,org,4);

    printf("1tmp:%s|,org:%s|\n",tmp,org);
}

<截取子字符串函数>
int cutTailSp(char *tmp,char *org,int len){
    int     i;
    sprintf(tmp,"%.*s",len,org);
    printf("2tmp:%s|,org:%s|\n",tmp,org);
    for(i=0;i<len;i++){
        if(tmp[len-1-i]==' '){
            tmp[len-1-i]='\0';
        }
        else    break;
    }
    return(strlen(tmp));
}

该函数的结果是想取四个子字符串【abc 】,但因为最后一个是空格,所以又截掉了,

只返回【abc】了。

 

那么这个%.*s到底代表什么意思呢?

原来这个*s都是和后边的参数len,org一一对应的,分别代表取几个字符和从哪儿取。

其实完整的写法应该是这样的,

sprintf(tmp,"%*.*s\n",m,n,org);

**s和后边的参数m,n,org一一对应,表示从org里取n个字符,然后在tmp的前头加上m-n个空格。

要是m比n小,那就不加了。

如果m不写,说明m=n嘛。

 

有关sprintf/printf的完整格式串,请参照如下网页。

https://www.cnblogs.com/cnbizhen/p/9565182.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值