C语言中,有一系列的函数以me结尾,如memcpy、memmove、memset等。这些函数都是用来操作内存的。
其中,memcpy函数用于将一个内存地址的内容复制到另一个内存地址,
memmove函数也是用于将一个内存地址的内容复制到另一个内存地址,但是它可以处理内存重叠的情况,而memcpy则不能。
memset函数用于将一个内存地址的内容全部设置为某个值。
以下是这些函数的简单示例:
#include <stdio.h> #include <string.h> int main () { char str1[20] = "hello"; char str2[20] = "world"; char str3[20]; char str4[20]; /* 复制 str1 到 str3 */ memcpy(str3, str1, strlen(str1)+1); printf("memcpy(str3, str1, strlen(str1)+1): %s\n", str3); /* 复制 str2 到 str4 */ memmove(str4, str2, strlen(str2)+1); printf("memmove(str4, str2, strlen(str2)+1): %s\n", str4); /* 设置 str1 为 'r' */ memset(str1, 'r', strlen(str1)); printf("memset(str1, 'r', strlen(str1)): %s\n", str1); return 0; }
//memcpy和memmove函数的第三个参数是要复制的字节数。因为字符串以'\0'结尾,所以要将'\0'也复制过去,所以要strlen(str1)加1。而memset函数的第三个参数是要设置的字节数,所以不需要加1。
//memset函数只会将指定的字节数设置为某个值。在这个例子中,strlen(str1)返回的是字符串str1的长度,所以memset函数只会将字符串str1的前5个字符设置为'r',而不是整个str1的内存都设置为'r'。