C++中的内存操作

1. memcpy#includestring.hvoid* memcpy(void* dest , void* src, unsigned int count)将源地址src指向内存区域的count个字节赋值到dest为起始地址的内存区域src和dest所指内存区域不能重叠,函数返回指向dest的...

1. memcpy

#include<string.h>
void* memcpy(void* dest , void* src, unsigned int count)
  • 将源地址src指向内存区域的count个字节赋值到dest为起始地址的内存区域
  • src和dest所指内存区域不能重叠,函数返回指向dest的指针
  • 注意,对象不能是简单的内存拷贝,例如C++中STL的字符串类型string,因为memcpy执行的是浅拷贝,只是简单的把第二个内存指向第一个内存的引用,而程序结束时,会对一块内存进行两次内存释放(析构函数)。C++ String 使用注意: memcpy

2. memset

#include<string.h>
void* memset(void* buffer,char c,int count)
  • 把buffer所指内存区域的前count个字节设置成字符c
  • 返回指向buffer的指针
  • 也适用于整数数组初始化为0或者-1,因为memset按照字节操作,有符号数的0为全0,有符号数的-1为全1,例如
int a[100];
memset(a,0,sizeof(a));
int b[1000];
memset(b,-1,sizeof(b));

3. strcpy

#include<string.h>
char *strcpy(char *dest,char *src); 
  • 把src所指由NULL结束的字符串复制到dest所指的数组中
  • src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串
  • 注意C语言中的字符数字以'\0'结尾,所以src的末尾必须是'\0'

4. memcpy

#inclue<string.h>
int memcpy(const void* buf1,const void* buf2,  size_t count)
  • 比较两个内存区域buf1和buf2连续count字节的字符级别比较结果,即

int   memcmp(const   void   *   cs,const   void   *   ct,size_t   count)  
{ 
          const   unsigned   char   *su1,   *su2;  
          int   res   =   0; 
          for(   su1   =   cs,   su2   =   ct;   0   <   count;   ++su1,   ++su2,   count--)  
          if   ((res   =   *su1   -   *su2)   !=   0)  
          break;  
          return   res;  
 }  
  • 返回结果
返回值 意义
< 0 buf1 less than buf2
0 buf1 identical to buf2
> 0 buf1 greater than buf2
  • 注意如果比较两个字符数组,则可能不会在\0处停下来,而是要比较连续count个字符

5. strcmp

#include<string.h>
int   strncmp(const   char   *   cs,const   char   *   ct,size_t   count)
  • 比较两个字符数组连续count个字节的比较结果,可能会在短的那个数组的\0处停止

本文标题为:C++中的内存操作

基础教程推荐