当size = 0时,snprintf()返回值

时间:2016-03-29 03:59:30

标签: command printf size

首先感谢您在这里度过的时光。当size = 0时,我对snprintf()有一个问题,代码如下:

#include <stdio.h>
#include <stdlib.h>

int main(int ac, char **av)
{
   char *str;
   int len;

   len = snprintf(NULL, 0, "%s %d", *av, ac);
   printf("this string has length %d\n", len);

   if (!(str = malloc((len + 1) * sizeof(char))))
      return EXIT_FAILURE;

   len = snprintf(str, len + 1, "%s %d", *av, ac);
      printf("%s %d\n", str, len);

   free(str);

   return EXIT_SUCCESS;
}

我跑的时候:

momo@xue5:~/TestCode$ ./Test_snprintf

结果是:

this string has length 17
./Test_snprintf 1 17

令我困惑的是在代码中,要写的大小是0,为什么显示17?

我错过了什么?

感谢~~

1 个答案:

答案 0 :(得分:1)

可以在Return value;

下找到解决方案in the man page
  

函数 snprintf()和vsnprintf()写入的字节数不超过大小(包括终止空字节(&#39; \ 0&#39;))。如果输出因此限制而被截断,则返回值为 如果有足够的空间可用,则写入最终字符串的字符数(不包括终止空字节)。

这样你就可以做你正在做的事情,&#34;试用版&#34;要获得正确的长度,然后动态分配缓冲区,以便在再次snprintf到分配的缓冲区时获得整个输出。