这些函数包含在<string.h>头文件中
memset–使用一个常量字节填充内存空间
使用常量字节 c 填充 s 指向的前 n 个字节。memset 函数按照字符数组的方式操作内存对象,其主要目的是提供一个高效的函数接口,通常用于初始化 malloc 函数申请的内存对象。
函数原型:
void *memset(void *s, int c, size_t n);
s–指向要操作的内存空间; c–指定要填充的值; n-- 指定要填充 s 指向空间的前 n 个字节
返回s指向的内存空间
示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 100
int main(void)
{
int *ptr;
ptr = (int *)malloc(NUM * sizeof(int));
if (ptr == NULL){
exit(1);
}
memset(ptr, 0, NUM);
return 0;
}
memcpy – 拷贝内存空间
从 src 指向的内存空间拷贝 n 个字节到 dest 指向的内存空间。src 和 dest 指向的内存区域不能出现重叠,否则应该使用 memmove 函数。
memcpy 函数并不关心被复制的数据类型,只是逐字节地进行复制,这给函数的使用带来了很大的灵活性,可以面向任何数据类型进行复制。
函数原型:
void *memcpy(void *dest, const void *src, size_t n);
dest–指向目标内存空间; src-- 指向源内存空间; n-- 指定要拷贝到 dest 指向空间的前 n 个字节
返回dest指向的内存空间
示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char str[] = "hello world!";
char *ptr;
int length = sizeof(str);
printf("length = %d\n", length);
ptr = (char *)malloc(length * sizeof(char));
if (ptr == NULL){
exit(1);
}
memset(ptr, 0, length);
memcpy(ptr, str, length);
printf("%s\n", ptr); //ptr->"hello world!"
return 0;
}
memmove – 拷贝内存空间
从 src 指向的内存空间拷贝 n 个字节到 dest 指向的内存空间。为了避免因为两个内存空间出现重叠而导致的悲剧,该函数会先将 src 指向的内存空间拷贝到一个临时的数组中,完了再从临时数组拷贝到目标内存空间。
函数原型:
void *memmove(void *dest, const void *src, size_t n);
dest–指向目标内存空间; src-- 指向源内存空间; n-- 指定要拷贝到 dest 指向空间的前 n 个字节
返回dest指向的内存空间
用法和memcpy类似
memcmp – 比较内存空间
memcmp 函数比较 s1 和 s2 指向的两个内存空间前 n 个字节,返回一个小于,等于或大于 0 的数表示 s1 小于、等于或大于 s2。
函数原型:
int memcmp(const void *s1, const void *s2, size_t n);
s1–指向待比较的第一个内存空间; s2-- 指向待比较的第二个内存空间; n-- 指定需要比较的字节个数
返回一个整数表示两个内存空间的大小关系:
小于0–字符串 1 的字符小于字符串 2 对应位置的字符;
等于0–两个字符串的内容完全一致;
大于0–字符串 1 的字符大于字符串 2 对应位置的字符。
示例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[10] = "abcd";
char str2[10] = "abcd";
if (memcmp(str1, str2, 10) == 0){
printf("两个内存空间完全一致!\n");
}
else{
printf("两个内存空间不一致!\n");
}
return 0;
}
memchr – 在内存空间中搜索一个字符
memchr 函数扫描 s 指向的内存空间的前 n 个字节,找到第一个匹配字符 c 时停止操作。
函数原型:
void *memchr(const void *s, int c, size_t n);
s–指向目标内存空间; c-- 指向目标字符; n-- 指定最大扫描字节数
返回值:
-
如果找到该字符,则返回指向该字符的指针;
-
如果找不到该字符,返回 NULL。
示例:
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[10] = "abcdefghijk";
char *ptr = NULL;
ptr = (char*)memchr(str, 'g', 10);
if(ptr != NULL){
printf("找到字符g!\n");
}
else{
printf("找不到字符g!\n");
}
return 0;
}