代码:
#include <stdio.h>
int main()
{
char data1[10];
char data2[10];
int ret1, ret2;
ret1 = sprintf(data1, "My name is Messi, I'm %d years old!", 28);;
printf("%s\n", data1);
ret2 = snprintf(data2, sizeof(data2), "My name is Messi, I'm %d years old!", 28);
printf("%s\n", data2);
printf("ret1=%d, ret2=%d\n", ret1, ret2);
return 0;
}
运行结果:
结论:
1.
sprintf进行处理时不会进行越界判断,如果欲写入的字符串长度大于等于字符数组长度,
会直接对之后的内存进行覆盖,极不安全。
snprintf则会考虑到字符数组的长度,若字符数组长度为n字节,则最多写入n-1字节,然后再在后面加上'\0'。
不会越界操作,这也是其被作为sprintf的替代函数的理由。
2.
sprinf返回的是实际写入的字符串长度。
snprintf返回的是欲写入的字符串长度。