Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63526
  • 博文数量: 20
  • 博客积分: 241
  • 博客等级: 二等列兵
  • 技术积分: 157
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-19 15:34
文章分类
文章存档

2013年(2)

2012年(12)

2011年(6)

分类: C/C++

2011-08-31 13:21:57


转自:http://hi.baidu.com/lindastar/blog/item/e7c08fafdceb63cc7dd92a4a.html

------------------------------------------------------------------------------------------------------------------------------------

int snprintf(char *restrict buf, size_t n, const char * restrict  format, ...);


函数说明:

       最多从源串中拷贝n1个字符到目标串中,然后再在后面加一个0所以如果目标串的大小为n的话,将不会溢出。


函数返回值:

       若成功则返回欲写入的字符串长度,若出错则返回负值。

------------------------------------------------------------------------------------------------------------------------------------

Result1(推荐的用法)


#include
#include


int main(int argc,char *argv[])
{
     char str[10]={0,};
     snprintf(str, sizeof(str), "0123456789012345678");
     printf("str=%s\n", str);
     return 0;
}

root] /root/lindatest
$ ./test
str=012345678

------------------------------------------------------------------------------------------------------------------------------------


Result2:(不推荐使用)


#include
#include


int main(int argc,char *argv[])
{
    char str[10]={0, };
    snprintf(str, 18, "0123456789012345678");
    printf("str=%s\n", str);
    return 0;
}

root] /root/lindatest
$ ./test
str=01234567890123456

------------------------------------------------------------------------------------------------------------------------------------

snprintf函数返回值测试


#include
#include


int main(int argc,char *argv[])
{
    char str1[10] ={0, };
    char str2[10] ={0, };
    int ret1=0,ret2=0;
    ret1=snprintf(str1, sizeof(str1), "%s", "abc");
    ret2=snprintf(str2, 4, "%s", "aaabbbccc");
    printf("aaabbbccc length=%d\n", strlen("aaabbbccc"));
    printf("str1=%s,ret1=%d\n", str1, ret1);
    printf("str2=%s,ret2=%d\n", str2, ret2);
    return 0;
}


[root] /root/lindatest
$ ./test
aaabbbccc length=9
str1=abc,ret1=3
str2=aaa,ret2=9

------------------------------------------------------------------------------------------------------------------------------------


附原博客问答:


4
2007-11-28 08:59 | 回复
问个问题,snprintf(dst, size, "str: %s\n", src) 其中的size是限定从src拷贝到%s的字符数,还是限定最终生成的dst的字符数? 因为从src中拷贝字符到%s,而生成的dst不止包括%s,还有前后一堆字符呢。
 
5
2007-11-28 12:49 | 回复
size是限定最终生成的dst的字符数,最多拷贝size-1个字符; 一般情况下size会取sizeof(dst),这是为了dst不溢出. 在snprintf(dst, size, "str: %s\n", src)中 如果size-1大于等于"str: %s\n"的长度,则把"str: %s\n"都拷贝到dst, 如果size-1小于"str: %s\n"的长度,则从"str: %s\n"拷贝size-1长度的字符串到dst.
阅读(1446) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~