简述strcpy、sprintf、memcpy的区别
重点1
- strcpy、sprintf、memcpy的用法举例。
- 当
sprintf(buff_a, "%s", buff_b)
时与strcpy(buff_a, buff_b)
效果相同。
//strcpy、sprintf #include <stdio.h> #include <string.h> int main() { char buff_a[64] = {'z', 'z', 'z', 'z','z', 'z'}; char buff_b[64] = {'a', 'b', 'c', '\0', 'd'}; char *str = strcpy(buff_a, buff_b); //str = abc 会将‘\0’一起复制过去 printf("str=%s, buff_a= %s\n", str, buff_a); //buff_a= len:6 str:abc addr:0x7fff9bbe25a0 int n = sprintf(buff_a, "len:%d str:%s addr:%p", 6, buff_b, buff_b); printf("n=%d, buff_a= %s\n", n, buff_a); }
代码执行结果: str=abc, buff_a= abc n=33, buff_a= len:6 str:abc addr:0x7fff9bbe25a0
重点2
memcpy 用法举例
//memcpy #include <stdio.h> #include <string.h> int main() { char buff_a[64] = {'z', 'z', 'z', 'z','z', 'z'}; char buff_b[64] = {'a', 'b', 'c', '\0', 'd'}; memcpy(buff_a, buff_b, 3); printf("buff_a:%s\n", buff_a); //buff_a:abczzz memcpy(buff_a, buff_b, 4); //buff_a:abc 会将‘\0’一起复制过去 printf("buff_a:%s\n", buff_a); return 0; }
代码执行结果: buff_a:abczzz buff_a:abc
重点3
执行效率:memcpy > strcpy > sprintf
原因:
memcpy
是对内存进行操作,strcpy
需要对‘\0’进行检查,sprintf
需要进行类型转换。
充电站
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习