memcpy函数

memcpy和memmove

牧云@^-^@ 提交于 2019-12-07 09:07:15
memcpy与memmove函数异同 memcpy memmove memset memcpy 函数原型 void * memcpy ( void * destination , const void * source , size_t num ) 头文件 < string . h > 作用:从源src所指的内存地址的起始位置开始拷贝num个字节到目标dest所指的内存地址的起始位置中。 注意: (1)memcpy是内存拷贝函数; (2)此函数不考虑类型,以字节为单位进行拷贝; (3)这个函数在遇到’\0’时不会停下来; (4)memcpy与strcpy功能有所重叠,但拷贝字符串一般使用strcpy,因为strcpy以’\0’结尾,更加专业安全。 模拟实现: # include <stdio.h> # include <windows.h> # include <assert.h> void * My_Memcpy ( void * dst , const void * src , int num ) { assert ( dst ) ; assert ( src ) ; char * dst_ = ( char * ) dst ; char * src_ = ( char * ) src ; while ( num ) { * dst_ = * src_ ; * dst_ ++

内存操作函数memmove,memcpy,memset

随声附和 提交于 2019-12-07 09:06:28
通过字符串的学习,我们知道字符串操作函数的操作对象是字符串,并且它的结束标志是结束符\0,当然这个说的是不 受限制的字符串函数。然而当我们想要将一段内存的数据复制到另一块内存时,我们不能使用字符串操作函数,当然也 不能一个一个复制,所以就引入了内存操作函数。 memcpy 函数原型: void *memcpy(void *dst, const void *src, size_t size); 将一块内存的数据复制到另一块内存。当两块内存重叠 的时候,memcpy就不能保证拷贝正确。 memmove 函数原型: void *memmove(void *dst, const void *src, size_t size); 可以拷贝内存重叠的,也可以拷贝不重叠的。 下面模拟实现memcpy函数: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<assert.h> void *my_memcpy(void *dest, const void *src, size_t size) { assert(dest); assert(src); char *str1 = (char *)dest; const char *str2 = (const char *)src; while (size) { *str1 =

简单排序算法之插入排序、选择排序和冒泡排序

穿精又带淫゛_ 提交于 2019-12-06 22:27:02
倒也不是临时起意,被问了冒泡排序,我竟然……忘了,好吧,时隔多年重见冒泡,好久不见 甚是想念; 于是乎就写了下代码,顺便重温了两个简单的排序算法:插入排序和选择排序; 作为一个开头,之后有机会就把其它相关排序也总结下,不得不说,真的好生疏/(ㄒoㄒ)/~~ 简单排序算法之插入排序、选择排序和冒泡排序 插入排序: 插入排序是从无序区里依次拿到元素放到有序区里合适的位置; 选择排序; 选择排序是每次将无序区里的最小值放到有序区里的最后一个位置; 冒泡排序; 冒泡排序是每次循环将最大的数“冒泡”到最上边; 有了这几个简单的描述,接下来让我们一个一个来看下; 1.插入排序: 插入排序是从无序区里依次拿到元素放到有序区里合适的位置; 1.1插入排序的理解: 可以将原来的数组看成两个区,分别用两个数组来表示,一个有序区,一个无序区; 有序区起始包含一个元素,即原数组的位置0所对应的元素; 无需区则包含剩余的所有元素; 我们遍历无需区元素,然后与有序区(从末尾位置)逐个进行比较,因为有序区有序,所以当找到满足比较大小的要求时对应的位置,就是元素要插到有序区对应的位置; 为此,我们还需要遍历有序区,好让遍历无序区的元素在有序区中找到合适的位置; 遍历无序区对应算法的外循环; 遍历有序区,比较出无序元素的位置对应内循环; 1.2我们看下具体实现的代码: //插入排序 /*数组 数组长度

c语言 memcpy()

谁说我不能喝 提交于 2019-12-05 14:22:29
原文地址: https://blog.csdn.net/qq_21792169/article/details/50561570 头文件:#include <string.h> memcpy() 用来复制内存,其原型为: void * memcpy ( void * dest, const void * src, size_t num ); memcpy() 会复制 src 所指的内存内容的前 num 个字节到 dest 所指的内存地址上。 memcpy() 并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。 需要注意的是: dest 指针要分配足够的空间,也即大于等于 num 字节的空间。如果没有分配空间,会出现断错误。 dest 和 src 所指的内存空间不能重叠(如果发生了重叠,使用 memmove() 会更加安全)。 与 strcpy() 不同的是,memcpy() 会完整的复制 num 个字节,不会因为遇到“\0”而结束。 【返回值】返回指向 dest 的指针。注意返回的指针类型是 void,使用时一般要进行强制类型转换。 代码示例: #include <stdio.h> #include <stdlib.h> #include <string.h> #define N (10) int main() {

memcpy函数的用法以及实现一个memcpy函数

不羁的心 提交于 2019-12-03 02:33:21
memcpy的用法 在项目中经常用到 memcpy 来实现内存的拷贝工作,如下代码片段 memcpy( pData, m_pSaveData_C, iSize * sizeof( unsigned short ) ); memcpy 的函数原型为: void * memcpy ( void * destination, const void * source, size_t num ); memcpy函数的功能是从源内存地址的起始位置开始拷贝若干个 字节 到目标内存地址中,即从源source中拷贝num个 字节 到目标destin中。 示例代码 int main() { vector<int> vec; vector<int> vec1; vec.push_back(10); vec.push_back(100); vec1.resize(vec.size()); memcpy(vec1.data(),vec.data(),vec.size() * sizeof(int)); for (vector<int>::iterator it = vec1.begin();it != vec1.end();it++) { cout << *it; } char myname[] = "Pierre dee Fermat"; memcpy(person.name,myname,strlen

mem系列与str系列函数了解

匿名 (未验证) 提交于 2019-12-03 00:28:02
系列函数通常处理内存内容,而Str通常处理字符串,这俩个家族系列函数经常会使用,在网上搜集了一些资料进行了整理,方便自己以后查阅,下面介绍了memcpy,strcpy,strncpy,memmove,memcmp,strcmp,strcat,strstr,strtok等函数: 函数原型 :void *memcpy(void *dest, const void *src,size_t n); 函数功能 :内存拷贝;将src指向内存地址的连续N个指针位置的内容拷贝至dest指针指向的位置 函数返回 :无 参数说明 : dest ― 目的内存空间指针 src ― 源内存 n ― 拷贝指针位置个数 # include <memory> include <iostream> include < string > void main() { char * src = “Hello Frankie World !”; char * dest = new char [ 50 ]; memset (dest, 0 , 50 ); memcpy (dest,src, 7 ); std :: cout <<”dset值为:”<< std ::endl; Out(dest); } 函数原型 :void * memccpy(void *dest, void *src, unsigned char c,

strcpy、memcpy和memset之间的区别

匿名 (未验证) 提交于 2019-12-03 00:22:01
今天刷题时遇到了这个问题,记录一下。 strcpy 比较简单,就是拷贝字符串,遇到'\0'时结束拷贝 。 memcpy 用来做内存拷贝,可以拷贝任何数据类型的对象并指定拷贝数据的长度:char a[100],b[50]; memcpy(b, a, sizeof(b)); 总结一下: strcpy和memcpy主要有以下3方面的区别。 复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。 复制的方法不同。strcpy不需要指定长度,它遇到字符串结束符"\0"便结束。memcpy则是根据其第3个参数决定复制的长度。 用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。 //注意:如果用的是sizeof(a),则会造成内存泄露。 比较复杂点的是 memset ,用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为 ‘ ’或 ‘\0’,比如: char a[100];memset(a, '\0', sizeof(a)); 另外比较方便的是对结构体的操作, memset可以方便的清空一个结构类型的变量或数组: 比如有结构体struct sample_strcut stTest,一般清空结构体的话得用如下方式: struct sample_struct { char csName

C++ vector容器和sort函数的学习

五迷三道 提交于 2019-12-02 04:58:53
Vector注意事项: 声明形如vector<> vec;的不是new出来而是作为普通变量的那么不需要delete, 在变量超出作用域时会自动回收 如果是用*vec = new vector<>()这种方式动态创建的vector那么需要delete vec vec里存放的元素如果不是指针那么不用delete, 这些元素在vec被释放时会被一起释放 vec里存放的元素是指针并且这些指针都是指向自己new的对象的话, 那么需要自己一个个delete c++中内存拷贝函数(C++ memcpy)详解 头文件:C++: #include<cstring> 原型: void * memcpy ( void *dest, const void *src, unsigned int count); //参数是void 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 函数原型: void * memcpy ( void *dest, const void *src, size_t n); 功能: 由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。 头文件: #include<string.h> 返回值:   函数返回一个指向dest的指针。 说明:    1

strcpy和memcpy的区别(转)

你。 提交于 2019-12-01 07:22:15
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 ); char * strcpy ( char * dest, const char * src) // 实现src到dest的复制 {    if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性   {        return NULL;   }    char *strdest = dest; //保存目标字符串的首地址    while ((*strDest++ = *strSrc++)!= '\0' ); //把src字符串的内容复制到dest下    return strdest; } void * memcpy ( void *memTo, const void *memFrom, size_t size)

C++对数组进行复制

时间秒杀一切 提交于 2019-11-30 15:12:26
C++ 风格的复制操作 使用STL中的copy算法 int a[] = {1,2,3,4,5}; int b[5]; std::copy(std::begin(a),std::end(a),std::begin(b)); for(auto e:b) cout<<e<<" "; // 输出 1,2,3,4,5 上述程序中,copy算法将数组a区间中的数复制到以begin(b)开始的区间中去. 使用array容器 (C++11) std::array<int,5> arr = {1,2,3,4,5}; std::array<int,5> copy; copy = arr; // 将arr中的元素复制到copy中 arr[0] = 100; for(auto e:copy) cout<<e<<" "; //输出 1,2,3,4,5 C 风格的复制操作 使用memcpy() int arr[] = {1,2,3,4,5}; int copy[5]; int len = sizeof(arr) / sizeof(arr[0]); memcpy(copy,arr,len*sizeof(int)); // 输出 1,2,3,4,5 for(auto e:copy) cout<<e<<" "; 注意:memcpy()函数的第三个参数表示的是要复制的字节数,而不是要复制的元素数目。至于这样做的原因