c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中
C语言中使用#include <stringh>;
C++中使用#include <cstring>和#include <stringh>都可以。
1source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针
2如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
注意:source和destin都不一定是数组,任意的可读写的空间均可。
函数原型
功能: 由src指向地址为起始地址的连续 size 个字节的数据复制到以dest指向地址为起始地址的内存空间内,函数返回值是 void ,指向拷贝成功的内存地址;
注意: src 和 dest 所指内存区域不能有重叠现象;
Demo:
简单的实现方式:
函数说明
函数说明: memmove 用于从source拷贝size个字符到dest,如果目标区域和源区域有重叠的话, memmove 能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。
memcpy 函数假设要复制的内存区域不存在重叠,如果你能确保你进行复制 *** 作的的内存区域没有任何重叠,可以直接用 memcpy ; 如果你不能保证是否有重叠,为了确保复制的正确性,你必须用 memmove 。
简单的实现方式:
函数原型
功能: 将已开辟的内存空间 dest 的前 size 个字节的值设为值 val 。
简单的实现方式:
函数原型
功能: 从buf所指内存区域的前count个字节查找字符ch,当第一次遇到字符ch时停止查找。如果成功,返回指向字符ch的指针;否则返回NULL。
简单的实现方式:
1、memcpy在使用时注意不可用字符串,如果是字符串会导致段错误,可以使用asprintf函数复制字符串,从而导致memcpy的段错误。
2、即memcpy不能拷贝目的地址(dest)和源地址(src)内存空间有重合的部分,更为确切的说应该是当目的地址大于源地址的时候,不能够有重合部分,否则源地址重合部分数据会发生错误。
3、当copy越界时,可能会出现程序异常。
扩展资料:
如果目标数组destin本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果要追加数据,则每次执行memcpy后,要将目标数组地址增加到你要追加数据的地址。
source和destin所指的内存区域可能重叠,但是如果source和destin所指的内存区域重叠,那么这个函数并不能够确保source所在重叠区域在拷贝之前不被覆盖。而使用memmove可以用来处理重叠区域。函数返回指向destin的指针。
-memcpy
strcpy()函数只能拷贝字符串。strcpy()函数将源字符串的每个字节拷贝到目录字符串中,当遇到字符串末尾的null字符(\0)时,它会删去该字符,并结束拷贝。
memcpy()函数可以拷贝任意类型的数据。因为并不是所有的数据都以null字符结束,所以你要为memcpy()函数指定要拷贝的字节数。
在拷贝字符串时,通常都使用strcpy()函数;在拷贝其它数据(例如结构)时,通常都使用memcpy()函数。以下是一个使用strcpy()函数和memcpy()函数的例子:
#include <stdio h>
#include <string h>
typedef struct cust-str {int id ;char last_name [20] ;
char first_name[l5];} CUSTREC;void main (void);
void main (void){char src_string = "This is the source string" ;
char dest_string[50];
CUSTREC src_cust;
CUSTREC dest_cust;
printf("Hello! I'm going to copy src_string into dest_string!
");
/ Copy src_ string into dest-string Notice that the destination
string is the first argument Notice also that the strcpy()
function returns a pointer to the destination string /
printf("Done! dest_string is: %s
" ,
strcpy(dest_string, src_string)) ;
printf("Encore! Let's copy one CUSTREC to another
") ;
prinft("I'll copy src_cust into dest_cust
");
/ First, intialize the src_cust data members /
src_cust id = 1 ;
strcpy(src_cust last_name, "Strahan");
strcpy(src_cust first_name, "Troy");
/ Now, Use the memcpy() function to copy the src-cust structure to
the dest_cust structure Notice that, just as with strcpy(), the
destination comes first /
memcpy(&dest_cust, &src_cust, sizeof(CUSTREC));
原型:void memcpy(void dest, const void src, size_t n)
例子:
#include <stdioh>
#include <stringh>
int main(void)
{
char src[] = "";
char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";
char ptr;
printf("destination before memcpy: %s", dest);
ptr = memcpy(dest, src, strlen(src));
if (ptr)
printf("destination after memcpy: %s", dest);
else
printf("memcpy failed");
return 0;
}
有
Arrays类的静态方法
public static char[] copyOf(char[] original,int newLength)
复制指定的数组,截取或用 null
字符填充(如有必要),以使副本具有指定的长度。对于在原数组和副本中都有效的所有索引,这两个数组将包含相同的值。对于在副本中有效而在原数组无效的所有索引,副本将包含
'\\u000'。当且仅当指定长度大于原数组的长度时,这些索引存在。
Arrays的copyOf()有多个重载方法,基本的数组复制和拷贝都有的。
具体看API :javautilArrays
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)