C语言中的memcpy()和memset()函数

memcpy函数

原型:
void *memcpy(void *dest, const void *src, size_t n);
需要的头文件:
#include
用法:
memcpy函数是内存拷贝函数,功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。

因为这个函数是直接操作内存的,所以效率会很高。

#include

int main(void)
{
    int a[5] = {1, 2, 3, 4, 5}, b[5];
    /*第一个参数是要保存的位置的起始地址,所以我们直接放b
     *第二个参数是源数据的起始地址,所以我们把a放上去
     *第三个参数是要复制的内存块的长度,为a的长度sizeof(a)*/
    memcpy(b, a, sizeof(a));
}

memset函数

原型:

void *memset(void *s, int ch, size_t n);
用法:
memset是计算机中C/C++语言函数。将s所指向的某一块内存中的前n个字节的内容全部设置为ch指定的ascii值, 第一个值为指定的内存地址,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。
函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
#include

int main(void)
{
    int a[5] = {1, 2, 3, 4, 5};
    memset(a, 0, sizeof(a));
}
注意:
如果是字符数组的话,memset可以随便用,但是如果是其他类型的数组,一般只用来清零,如果是填充数据就不合适了,如:
memset(a, 1, sizeof(a));
想用这个来把a所有元素设置为1,是不成功的,为什么呢?因为memset函数每次填充的数据长度为一个字节,即为0x01,而a的一个元素长度为4个字节,即0x00000000,如果把0x01填充进去,则填充的结果是0x01010101,而不是我们期待的0x00000001,所以是不合适的,但是用来清零还是很适合的。


转载自:http://www.cnblogs.com/king-ding/p/memset_mencpy.html

你可能感兴趣的:(C语言)