Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8075192
  • 博文数量: 594
  • 博客积分: 13065
  • 博客等级: 上将
  • 技术积分: 10324
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-26 16:44
个人简介

推荐: blog.csdn.net/aquester https://github.com/eyjian https://www.cnblogs.com/aquester http://blog.chinaunix.net/uid/20682147.html

文章分类

全部博文(594)

分类: C/C++

2010-08-19 10:03:58

有关snprintf返回值更多信息,请参考:

char str[10];
int rt = snprintf(str, 3, "%s", "0123456789"); // 请注意这里的3是包括结尾符在内的,所以执行后,str的值应当为“01”,而不是“012”
上述代码,rt将为10。

重新实现snprintf,让它返回实际写入的字节数(要减去结尾符):
int snprintf(char * buf, size_t size, const char *fmt, ...)
{
    int i;  
    va_list args;

    va_start(args, fmt);
    i=vsnprintf(buf,size,fmt,args);
    va_end(args);

    return (i >= size) ? (size - 1) : i; 
}

最好给snprintf换个名字,或者放在自己的名字空间内,以免和全局的冲突。
阅读(3961) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~