snprintf 第二个参数是限制长度的,但是这个长度是包含'/0'
果然是 如果源字符串 超过这个长度 只会拷贝 -1个字符串 最后一个拷贝的是/0
很严重的bug哦。。得空赶紧修复下 呵呵 多谢啦
我也是测试22亿号码时发现的,返回码总是用户不在线,因为末尾的号码没写进去。 strncpy 的长度参数就不会拷贝/0
对于返回值,snprintf若成功则返回欲写入的字符串长度,若出错则返回负值。
int main(int argc, char *argv[])
{
char sTest[11] = {0};
sTest[5] = 't';
int i = snprintf(sTest, 5, "%u", 1234567891);
printf("%s/n", sTest);
printf("%d/n", strlen(sTest));
printf("%d/n", i);
char sTest1[11] = {0};
sTest1[5] = 't';
strncpy(sTest1, "1234567891", 5);
printf("%s/n", sTest1);
return 0;
}
打印:
1234
4
10
12345t