1.典型问题一
- 下面的程序输出什么?为什么?
#include <stdio.h>
int main()
{
char buf[10] = { 0 };
char src[] = "hello %s";
snprintf(buf, sizeof(buf), src);
printf("buf = %s\n", buf);
return 0;
}
- 运行结果:
- 输出不符合我们的预期,我们预期输出hello %s。
- 分析 :
- snprintf函数本身是可变参数函数,原型:int snprintf(char* buffer, int buf_size, const char* fomart, ...)
- 当函数只有3个参数时,如果第三个参数没有包含格式化信息,函数调用没有问题;相反,如果第三个参数包含了格式 化信息,但缺少后续对应参数,则程序行为不确定。格式化信息必须与变参个数相匹配。
- 上面代码修改如下: