yef.zhu 发表于 2013-2-1 09:29:44

c库中snprintf返回值误区

       最近看开源代码中发现一个问题,下面是发表在内核开发论坛上到一篇文章: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;"> 
页: [1]
查看完整版本: c库中snprintf返回值误区