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]