六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 33|回复: 0

c库中snprintf返回值误区

[复制链接]

升级  42%

3

主题

3

主题

3

主题

童生

Rank: 1

积分
21
 楼主| 发表于 2013-1-26 12:27:02 | 显示全部楼层 |阅读模式
       最近看开源代码中发现一个问题,下面是发表在内核开发论坛上到一篇文章:http://lwn.net/Articles/69419/,主要提到到问题就是stdio.h中的snprintf函数的返回值的问题,该函数定义如下:
       int snprintf(char *str, size_t size, const char *format, ...);
       很多开发者都会认为该函数的返回值是写入到指定str缓冲区的字符数量,这个想法是错误的,查看源代码可以得到结果是返回值是整个构建字符数,函数假定字数是可以全部被写入到缓冲区中的。当缓冲区小于字符总数时,这样使用返回值进行多次写入就可能会导致缓冲区溢出现象。如下情况:有关snprintf实现细节可查看 http://www.ijs.si/software/snprintf/
if ((len += snprintf (buf+len, buflen-len, "...", ...)) > buflen) {        optionally deal with the error;        len = buflen;}<div class="PageHeadline">snprintf() confusion

<div class="Byline" style="text-align: center;">[Posted February 3, 2004 by corbet] 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表