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++中的内存操作
基础教程推荐
猜你喜欢
- 详解c# Emit技术 2023-03-25
- 一文带你了解C++中的字符替换方法 2023-07-20
- 如何C++使用模板特化功能 2023-03-05
- C语言基础全局变量与局部变量教程详解 2022-12-31
- C利用语言实现数据结构之队列 2022-11-22
- C语言 structural body结构体详解用法 2022-12-06
- C/C++编程中const的使用详解 2023-03-26
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C++详细实现完整图书管理功能 2023-04-04
- C++中的atoi 函数简介 2023-01-05