首先感谢您在这里度过的时光。当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?
我错过了什么?
感谢~~
答案 0 :(得分:1)
可以在Return value
;
函数 snprintf()和vsnprintf()写入的字节数不超过大小(包括终止空字节(&#39; \ 0&#39;))。如果输出因此限制而被截断,则返回值为 如果有足够的空间可用,则写入最终字符串的字符数(不包括终止空字节)。 强>
这样你就可以做你正在做的事情,&#34;试用版&#34;要获得正确的长度,然后动态分配缓冲区,以便在再次snprintf到分配的缓冲区时获得整个输出。