【转】 strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。
strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。
已知strcpy函数的原型是:char* strcpy(char* dest, const char*
src);
memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。
void *memcpy( void
*dest, const void *src,
size_t count );
void *memcpy(void *dest, const void *src, size_t size)//size_t是一个与机器相关的unsigned类型,头文件stddef.h
{
if(NULL==dest||NULL==src)
return NULL; char *tempSrc = (char *)src;
char *tempDest= (char *)dest;
while(size-->)
*tempDest++ = *tempSrc++ ; return dest;
}
void *memset(void *s,int ch,size_t n)
{
const unsigned char unch = ch;
unsigned char *sr=(unsigned char *)s; while(n--)
{
*sr = unch;
sr++;
}
return s;
}
char * strcpy(char * dest, const char * src)
{
if(NULL==dest||NULL==src)
return NULL; char *strDest = dest;
//while ((*strDest++ = *src++)!='\0'); //把src字符串的内容复制到dest下
while ( *src != '\0' )
*strDest++ = *src++;
*strDest = '\0'; return dest;
}
char *strcat(char *dest, const char *src)
{
if(NULL==dest||NULL==src)
return NULL; char *strDest = dest;
while(*strDest) //是while(*strDest!=’\0’)的简化形式,若使用while(*strDest++)则会出错,因为循环结束后strDest还会执行一次++,那么strDest
strDest++; while(*strDest++ = *src++)
NULL; return dest;
}
strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。
转:http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html
【转】 strcpy和memcpy的区别的更多相关文章
- strcpy与memcpy的区别
strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制 ...
- strcpy和memcpy的区别(转载)
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
- strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
- [置顶] strcpy和memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容,还会复制字符串的结束符. 已知strcpy函数 ...
- sprintf、strcpy 及 memcpy 函数区别
这些函数的区别在于 实现功能 以及 操作对象 不同.strcpy 函数操作的对象是 字符串 ,完成 从 源字符串 到 目的字符串 的 拷贝 功能. sprintf 函数操作的对象 不限于字符串 :虽然 ...
- strcpy和memcpy的区别(转)
转自:http://www.cnblogs.com/stoneJin/archive/2011/09/16/2179248.html strcpy和memcpy都是标准C库函数,它们有下面的特点.st ...
- strcpy和memcpy的区别-(转自stone Jin)
strcpy和memcpy都是标准C库函数,它们有下面的特点.strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符. 已知strcpy函 ...
- sprintf、strcpy和memcpy的区别
做某题用到了sprintf把一个字符数组(字符串)写到二维字符数组里,然后耗时挺长的,想了想strcpy好像也可以,事实证明strcpy效率果然更高,然后想了想觉得memcpy好像也可以.实践了一下的 ...
- strcpy和memcpy,memmove函数的区别
strcpy和memcpy的区别 strcpy和memcpy都是标准C库函数,它们有下面的特点. strcpy提供了字符串的复制.即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制 ...
随机推荐
- List<T> 添加 DataTable
public System.Data.DataTable getDataTable() { System.Data.DataTable dt = new System.Data.DataTable() ...
- C语言 ---- 基本数据类型和基本运算 iOS学习-----细碎知识点总结
// 导入头文件(stdio.h),标准输入输出的头文件,#include <stdio.h> // 程序的入口int main(int argc, const char * argv[] ...
- busybox rootfs 启动脚本分析(一)
imx6文件系统启动脚本分析.开机运行/sbin/init,读取/etc/inittab文件,进行初始化. 参考链接 http://blog.163.com/wghbeyond@126/blog/st ...
- favicon.ico的制作
1.选取需要的图片(jpg的格式等) 2.在网上搜索favicon.ico的制作,将jpg转为ico 3.在html中输入<link rel="shortcut icon" ...
- RDIFramework.NET开发实例━表约束条件权限的使用-WinForm
RDIFramework.NET开发实例━表约束条件权限的使用-WinForm 在实际的应用中,客户常有这样的需求,指定用户或角色可以看指定条件下的数据,这里的“指定条件”在RDIFramework. ...
- Eclipse定制右键创建文件快捷菜单
打开窗口“Customize Perspective - Java EE”,切换选项卡到“Shortcuts”: 进行一下配置: “Generate”:如上图勾选方式 "Java" ...
- For,Function,Lazy
package com.dtgroup.study import scala.io.Source object ForFunctionLazy { def main(args: Array[Strin ...
- java虚拟机内部介绍
一.介绍 java 的内存管理和垃圾回收在某种程度是同一个问题来着.对于java程序员来说,在虚拟机自动内存管理机制的帮助下,不在需要为每一个new操作去写配对的delete/free代码,不容易出现 ...
- CentOS 命令模式下设置静态IP
ASP.NET程序猿第一次修改IP,之前没有接触过Linux,有点伤不起... # cd /etc/sysconfig/network-scripts/ # ls 会看到 ifcfg-eth0 if ...
- C# 中的"yield"使用
yield是C#为了简化遍历操作实现的语法糖,我们知道如果要要某个类型支持遍历就必须要实现系统接口IEnumerable,这个接口后续实现比较繁琐要写一大堆代码才能支持真正的遍历功能.举例说明 usi ...