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
        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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部