内存空间相关的库函数(memset memcpy memmove memcmp memchr)

这些函数包含在<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-- 指定最大扫描字节数

返回值:

  1. 如果找到该字符,则返回指向该字符的指针;

  2. 如果找不到该字符,返回 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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值