何时vsnprintf
函数可以返回0
?它表现异常,正在返回0
。任何环境依赖都会存在吗?
#include<stdio.h>
#include<stdarg.h>
void func(int a,const char *format,...)
{
int length = 0;
va_list ap;
va_start(ap, format);
length = vsnprintf(NULL, 0, format, ap);
va_end(ap);
printf("length is %d\n", length);
}
int main()
{
func(10,"abcd");
return 0;
}
答案 0 :(得分:1)
vsnprintf
函数返回写入的字符数,而不是 计算终止空字符。如果指定了缓冲区大小 by count不足以包含指定的输出format
和argptr
,vsnprintf
的返回值是。{ 如果要编写的字符,不计算空字符 数量足够大。如果返回值大于count - 1
,输出已被截断。返回值-1
表示发生了编码错误。
因此,如果没有任何内容,它只返回零。由于您将缓冲区大小传递为0
,因此它无法写入任何内容,因此成功时将始终返回0
。
如果你想将结果变成其他任何东西,那么你需要创建一个缓冲区。
void func(int a,const char *format,...)
{
const int BUFFER_SIZE = 256;
char buffer[BUFFER_SIZE];
int length = 0;
va_list ap;
va_start(ap, format);
length = vsnprintf(buffer, BUFFER_SIZE, format, ap);
va_end(ap);
printf("length is %d\n", length);
}
答案 1 :(得分:0)
当它写入(或写入)的字节数等于0时;换句话说,当它产生(会产生)没有输出时。
返回值
1-3)成功时写入的字符数,如果发生错误则写入负值。
4)成功时写入的字符数,如果发生错误则写入负值。如果由于buf_size限制而导致结果字符串被截断,则函数将返回已写入的字符总数(不包括终止空字节),如果没有强制限制。