C语言之内存操作:memset & memcpy
2016-06-04 09:23
429 查看
C语言当中,在string.h头文件中还定义了与内存相关的操作,这里讲一下,memset和memcpy函数。
void *memset(void *Dst, int Val, size_t Size);
memset函数将Dst所在的内存区域进行重置为Val值,重置的范围由Size决定,表示Dst所在的内存区域的Size字节被置为Val值。memset一般用作一段内存空间或数组的初始化。
例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int *p = (int *)malloc(10 * sizeof(int));
memset(p, 0, 10*sizeof(int));
free(p);
return 0;
}
需要注意的是,memset对int型内存空间重置时,Val值取0或-1得到的结果是正确的,对于其他值都是不对的。
对于char型的空间重置的话,Val可以是数值,也可以是字符:
char str[10];
memset(str, 1, 10*sizeof(char)); // str字符数组,重置为数值1(ASCII码值为1)
memset(str, '1', 10*sizeof(char)); //str字符数组,重置为字符'1'
void *memcpy(void *Dst, void *Src, size_t Size);
memcpy函数将Src所在区域的Size字节的数据复制到Dst所在的内存空间。需要注意的是,memcpy与strcpy相比,遇到'\0'不会停止复制,而是复制完Size字节。
例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p = (char *)malloc(10 * sizeof(char));
char a[10];
memset(p, 1, 10*sizeof(char));
memcpy(a, p, 10*sizeof(char));
free(p);
return 0;
}
1. memset
memset的函数原型为:void *memset(void *Dst, int Val, size_t Size);
memset函数将Dst所在的内存区域进行重置为Val值,重置的范围由Size决定,表示Dst所在的内存区域的Size字节被置为Val值。memset一般用作一段内存空间或数组的初始化。
例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
int *p = (int *)malloc(10 * sizeof(int));
memset(p, 0, 10*sizeof(int));
free(p);
return 0;
}
需要注意的是,memset对int型内存空间重置时,Val值取0或-1得到的结果是正确的,对于其他值都是不对的。
对于char型的空间重置的话,Val可以是数值,也可以是字符:
char str[10];
memset(str, 1, 10*sizeof(char)); // str字符数组,重置为数值1(ASCII码值为1)
memset(str, '1', 10*sizeof(char)); //str字符数组,重置为字符'1'
2. memcpy
memcpy的函数原型为:void *memcpy(void *Dst, void *Src, size_t Size);
memcpy函数将Src所在区域的Size字节的数据复制到Dst所在的内存空间。需要注意的是,memcpy与strcpy相比,遇到'\0'不会停止复制,而是复制完Size字节。
例:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p = (char *)malloc(10 * sizeof(char));
char a[10];
memset(p, 1, 10*sizeof(char));
memcpy(a, p, 10*sizeof(char));
free(p);
return 0;
}
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言