strncpy&snprintf用法之比较

发布于:2021-09-26 07:49:50

strncpy的正确用法:


strncpy(dest, src, sizeof(dest));
dest[sizeof(dest)-1] = ‘’;



snprintf的正确用法:



snprintf(dest, sizeof(dest), "%s", src);



strncpy的问题:


    size一定要用sizeof(dest)或sizeof(dest)-1,不可误用sizeof(src).手工填0. 务必要把dest的最后一个字节手工设置为0. 因为strncpy仅在src的长度小于dest时,对剩余的字节填0.性能问题。当dest长度远大于src时,由于strncpy会对多余的每个字节填0,会有很大的性能损失。返回值。strncpy返回dest,因而无法知道拷贝了多少个字节。

snprintf的问题:


    不可省略第三个参数"%s",隐患是,如果src中包含%,可能会引发core(经过测试,使用gcc编译器,如果?省略第三个参数"%s"和src中包含%,不会引发core,但dest结果不正确 测试代码如下char test[10]; ?snprintf(test, sizeof(test), "%sa bbbb cccc");? 或 snprintf(test, sizeof(test), "aaa%sbbb%acccc%ddddd%xffff");)。性能问题。当src长度远大于dest时,由于snprintf要返回src的字节数,需要扫描src,会有很大的性能损失。返回值。如果当前buf够用,返回实际写入的字符数;如果不够用,返回将要写入的字符数。换句话说,返回值就是传入的字符数目。

总结:


    snprintf使用比strncpy简洁。snprintf可以获取被拷贝的字节数。二者都有性能问题。如果src远大于dest,用strncpy;如果dest远大于src,用snprintf。

相关推荐

最新更新

猜你喜欢