【linux 开发】snprintf返回值为最后一个字符串的长度

snpri.c 剖析示例及打印值如下:

#include "string.h"
#include "stdio.h"
#include "stdlib.h"
void main()
{
    char *p ,*q;
    int i ,ioffset;
    p = malloc(64);
    

    for (i = 0; i < 10 ; i++)
    {
        ioffset += snprintf(p + ioffset, 64 - ioffset,"*********");
        q = p + ioffset - 9;
        printf("%d %d %s %s\n",i, ioffset ,p,q);
    }

    free(p);
}



[root@localhost snpri]# gcc -g -o snpri snpri.c ;./snpri

0 9 ********* *********
1 18 ****************** *********
2 27 *************************** *********
3 36 ************************************ *********
4 45 ********************************************* *********
5 54 ****************************************************** *********
6 63 *************************************************************** *********
7 72 ***************************************************************
8 81 *************************************************************** *********
9 90 *************************************************************** *********
*** Error in `./snpri': free(): invalid next size (fast): 0x0000000000984010 ***
======= Backtrace: =========
/lib64/libc.so.6[0x30db87d0b8]
./snpri[0x4006aa]
/lib64/libc.so.6(__libc_start_main+0xf5)[0x30db821b45]
./snpri[0x400549]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值