`

strcpy函数和memcpy函数有什么区别?它们各自使用时应该注意什么问题?

 
阅读更多

strcpy和memcpy都是用于从一块内存复制一段连续的数据到另一块内存,区别是终结标识不同。
strcpy(a, b)从b复制内容到a,然后从b+1复制内容到a+1,依次类推,知道b+i的内容是'\0'。要小心的是1:确保b是以'\0'结尾的字符串;2:确保a开始有足够的可用内存。通常用strncpy(a, b, c)会好一些,这时复制的数据最长不超过c字节。

memcpy(a, b, c)从b开始复制c字节内容到a。相比strcpy,memcpy是确定复制c个字节的。所以只要保证b开始有c字节有效数据,a开始有c字节内存空间就行。
要小心的是:memcpy对于重叠内存的复制支持不太好。重叠内存是指
char a[10]的话,memcpy(a, a + 3, 5)这样的,源数据是a+3到a+7,目标位置是a到a+5,有重复。
如果希望覆盖,可以用memmove。

分享到:
评论

相关推荐

    安全函数strcpy_s、strncpy_s、snprintf_s、memcpy_s

    用于了解安全函数strcpy_s、strncpy_s、snprintf_s、memcpy_s

    Memset、Memcpy、Strcpy 的作用和区别

    本文详细介绍了Memset、Memcpy、Strcpy 的作用及三者的区别,函数原型及使用技巧等。

    常用函数的实现strcpy,memcpy,memmove,strcat,strcmp原型

    常用函数的实现strcpy,memcpy,memmove,strcat,strcmp原型

    C函数之memcpy()函数用法

     1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。  2.与strcpy相比,memcpy并不是遇到''结束,而是一定会拷贝完n个字节。  memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型

    C语言 strcpy和memcpy区别详细介绍

    C语言 strcpy和memcpy区别详细介绍 PS:初学算法,开始刷leetcode,Rotate array的预备知识(写的代码Time Limit Exceed难过)于是百度高效算法,本篇作为预备知识。 1、strcpy和strncpy函数 这个不陌生,大一学...

    C 语言编程常见问题解答.chm

    6.l 串拷贝(strcpy)和内存拷贝(memcpy)有什么不同?它们适合于在哪种情况下使用? 6.2 怎样删去字符串尾部的空格? 6.3 怎样删去字符串头部的空格? 6.4 怎样使字符串右对齐? 6.5 怎样将字符串打印成指定长度...

    深入理解strcpy与memcpy的区别

    strcpy与memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* ...

    C语言编程要点

    6.1. 串拷贝(strcpy)和内存拷贝(memcpy)有什么不同?它们适合于在哪种情况下使用? 93 6.2. 怎样删去字符串尾部的空格?。 94 6.3. 怎样删去字符串头部的空格? 95 6.4. 怎样使字符串右对齐? 97 6.5. 怎样将字符串打印成...

    C语言面试总结

    1.10 memcpy函数实现 1.11 memcpy和memmove函数的实现 1.12 strcat函数实现 1.13 使用库函数atoi,将char *→int 1.14 使用库函数itoa,将int→char * 1.15 不使用库函数,将int→char * 1.16 不使用库函数,将char ...

    你必须知道的495个C语言问题

    6.12 既然数组引用会退化为指针,如果array是数组,那么array和&array又有什么区别呢? 6.13 如何声明一个数组的指针? 动态数组分配 6.14 如何在运行时设定数组的大小?怎样才能避免固定大小的数组? 6.15 ...

    C_C++问题总结

    2.2 strcpy、sprintf与memcpy 2.3 new/delete 与 malloc/free 2.4 确定一个数转化成二进制后是1的位的个数 2.5 ++i和i++的区别 3. 常见问题 3.1 数组名和指针的区别 3.2 指针和引用的区别 3.3 构造函数能否为虚函数 ...

    《你必须知道的495个C语言问题》

    1.20 const char *p、char const *p和char *const p有什么区别? 10 复杂的声明 11 1.21 怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 11  1.22 如何声明...

    C语言函数库函数详细介绍手册

    C语言常用函数库详细的使用说明 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn ...

    C语言函数速查手册

    C语言常见的函数速查 字符串函数 bcmp bcopy bzero memccpy memchr memcmp memcpy memicmp memmove memset movmem setmem stpcpy strcat strchr strcmp strcmpi strcpy strcspn strdup ...

    C/C++中的mem函数和strcopy函数的区别和应用

    strcpy和memcpy都是标准C库函数,它们有下面的特点。 strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。 memcpy提供了一般内存的复制。即memcpy对于...

    C语言FAQ 常见问题列表

    o 7.9 既然数组引用会蜕化为指针, 如果 arr 是数组, 那么 arr 和 &arr 又有什么区别呢 ? o 7.10 我如何声明一个数组指针 ? o 7.11 我如何在运行期设定数组的大小 ? 我怎样才能避免固定大小的数组 ? o 7.12 ...

    c++笔试题(无答案)

    1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?...8.完成字符串拷贝可以使用 sprintf、strcpy 及 memcpy 函数,请问这些函数有什么区别,你喜欢使用哪个,为什么? 9.变量的声明和定义有什么区别?

Global site tag (gtag.js) - Google Analytics