现在的位置: 首页 > 综合 > 正文

snprintf strncpy

2013年08月08日 ⁄ 综合 ⁄ 共 504字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.