strcpy、 strncpy 和snprintf
来源:互联网 发布:看美剧用什么视频软件 编辑:程序博客网 时间:2024/06/09 14:39
Strcpy、 strncpy 和snprintf
strcpy:字串复制
原型:char *strcpy(char *dest, char *src);
功能:把src所指由'\0'结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
注意:当src串长度>dest串长度时,程序仍会将整个src串复制到dest区域,可是dest数组已发生溢出。
因此会导致dest栈空间溢出以致产生崩溃异常。如果不考虑src串的完整性,可以把dest数组最后一元素置为NULL,从dest串长度处插入NULL截取字串。
strncpy的正确用法:
strncpy(dest, src, sizeof(dest));
dest[sizeof(dest)-1] = ‘\0';
snprintf的正确用法:
snprintf(dest, sizeof(dest), "%s", src);
strncpy的问题:
1.size一定要用sizeof(dest)或sizeof(dest)-1,不可误用sizeof(src).
2.手工填0. 务必要把dest的最后一个字节手工设置为0.因为strncpy仅在src的长度小于dest时,对剩余的字节填0.
3.性能问题。当dest长度远大于src时,由于strncpy会对多余的每个字节填0,会有很大的性能损失。
4.返回值。strncpy返回dest,因而无法知道拷贝了多少个字节。
snprintf的问题:
1.不可省略第三个参数"%s",隐患是,如果src中包含%,会引发core。
2.性能问题。当src长度远大于dest时,由于snprintf要返回src的字节数,需要扫描src,会有很大的性能损失。
3.返回值。如果当前buf够用,返回实际写入的字符数;如果不够用,返回将要写入的字符数。换句话说,返回值就是传入的字符数目。
总结:
1.snprintf使用比strncpy简洁。
2.snprintf可以获取被拷贝的字节数。
3.二者都有性能问题。如果src远大于dest,用strncpy;如果dest远大于src,用snprintf。
snprintf(s,len,"%s...",char);strncpy(char,const char,len);
snprintf的len包括'/0',,,,,,,,,,strncpy的len不包括‘/0’,就指具体的字符串长度。
- strcpy、 strncpy 和snprintf
- strcpy、strncpy、strncpy_s和snprintf
- strcpy ,strncpy ,strlcpy和snprintf的使用
- sprintf、snprintf、strcpy、strncpy
- strcpy ,strncpy ,strlcpy, snprintf, memcpy 用法、区别和效率
- snprintf和strncpy对比
- strcpy/strncpy/sprintf/_snprintf/snprintf的区别
- strcat,strncat,strcpy,strncpy,snprintf,vsnprintf
- strcpy 和 strncpy
- strcpy和strncpy区别
- Strcpy和Strncpy
- strcpy和strncpy区别
- strcpy和strncpy区别
- strcpy和strncpy
- strcpy和strncpy
- strcpy strncpy和strlcpy
- strcpy和strncpy
- strcpy和strncpy区别
- spring常用注解
- 小河弹着动听的琴声
- Oracle:集合运算
- 大声地说出那憋了好久的话
- 送给正在看书的老师
- strcpy、 strncpy 和snprintf
- Oracle:处理数据
- /usr/bin/ld: cannot find -lssl
- 广场四周建了许多的渠道高大的灯柱子
- 我走在校园的渠道小路上发现嫩草已经吐绿
- CakePHP 2.0 でライブラリの読み込みAdd Star
- 为何 IntelliJ IDEA 比 Eclipse 更好
- 可我却能够时时刻刻感觉到它的存在秋天到了啊
- 在同学郭为妈妈的渠道精心安排下