sprintf、strcpy和memcpy的区别
2016-05-30 08:42
288 查看
做某题用到了sprintf把一个字符数组(字符串)写到二维字符数组里,然后耗时挺长的,想了想strcpy好像也可以,事实证明strcpy效率果然更高,然后想了想觉得memcpy好像也可以。实践了一下的确可以,效率不用说也比sprintf高,毕竟memcpy是对内存操作。然后我就百度了一下它们的区别,做个总结(记笔记)。
sprintf 可以用%s来实现格式化写入,其他两个做不到。
strcpy 遇到\0结束(\0也被复制了),只能拷贝字符串。
memcpy 根据size大小来复制,可以复制各种数据类型(结构体、数组)。
对于拷贝字符串,我们选择strcpy,因为memcpy还需要提供size参数,且strcpy另一个优势是返回值是char *,也就是目标字符串的首地址,这样可以写链式表达式:
strlen(strcpy(s1,strcpy(dest,src)));
相关:C语言中常用的string.h的字符函数
sprintf 可以用%s来实现格式化写入,其他两个做不到。
strcpy 遇到\0结束(\0也被复制了),只能拷贝字符串。
memcpy 根据size大小来复制,可以复制各种数据类型(结构体、数组)。
对于拷贝字符串,我们选择strcpy,因为memcpy还需要提供size参数,且strcpy另一个优势是返回值是char *,也就是目标字符串的首地址,这样可以写链式表达式:
strlen(strcpy(s1,strcpy(dest,src)));
strcpy的实现
char *strcpy(char *strDest, const char *strSrc);// 实现strSrc到strDest的复制 { if ((strSrc == NULL) || (strDest == NULL)) //判断参数有效性 { return NULL; } char *dest = strDest; //保存目标字符串的首地址 while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的内容复制到dest下 return dest; }
memcpy的实现
void *memcpy(void *memTo, const void *memFrom, size_t size) { if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效 return NULL; char *tempFrom = (char *)memFrom; //保存memFrom首地址 char *tempTo = (char *)memTo; //保存memTo首地址 while(size -- > 0) //循环size次,复制memFrom的值到memTo中 *tempTo++ = *tempFrom++ ; return memTo; }
相关:C语言中常用的string.h的字符函数
相关文章推荐
- 冒泡选择排序
- Win10免费升级超级优惠仅剩2个月 Win7/Win8.1用户抓紧升级
- 设计模式 - 工厂模式
- 过滤器、拦截器、监听器的区别
- 怎么判断百度网盘分享连接已经失效?有那么简单吗?
- Activity的四种启动方式
- 四阶模仿重要公式
- ORACLE GROUPING函数的使用
- 结束北漂生活倒计时中
- Web应用程序项目以配置使用IIS。未找到Web服务器
- 修改UIWebView中字体的大小
- java集合类详解
- 十三周作业显示
- 输入一个字符串,输出这个字符串中重复的元素及其个数
- 子集生成 二进制法
- 团队冲刺2---个人工作总结六(5.30)
- mysql基础知识
- Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMap
- priority_queue
- CGI与FastCGI 转