快速掌握 C 语言 memset 函数

函数的基本概念

核心功能:快速将内存块的每个字节设为指定值,常用于初始化内存或清空缓冲区。

函数原型:

void *memset(void *ptr, int value, size_t num);
  • ptr:目标内存的起始地址(如数组、结构体指针)。
    • 必须可写,否则程序崩溃!
  • value:要设置的值(范围:0~255)。
    • 超出范围时,取低 8 位(如 300300%256=44)。
  • num:填充的字节数(不是元素个数!)。
    • 例:int arr[10] → 总字节数 = 10 * sizeof(int)

返回值:返回原始指针 ptr,便于链式调用(如直接传给其他函数)。

使用示例

1)清零内存

int arr[100];
memset(arr, 0, sizeof(arr));  // 所有字节设为 0 (int类型 设为1是错误的)

2)初始化结构体

struct Data data;
memset(&data, 0, sizeof(data));  // 清空结构体

避坑指南

1)不要给整数/浮点数设置非0值

核心问题:memset 按字节填充,破坏多字节类型的内存结构!

// 错误示例
int arr[10];
memset(arr, 1, sizeof(arr));  // 每个字节设为1 → int值变成0x01010101(不是1!)

解决方案:

  • 清零内存(全0)安全;memset(arr, 0, sizeof(arr)); // 全0对所有类型有效
  • 设置非0值 → 用循环逐元素赋值;for (int i=0; i<10; i++) arr[i] = 1; // int设为1

2)内存越界必崩溃

char buffer[10];
memset(buffer, 0, 20);  // 越界写20字节(buffer只有10字节)

安全做法:用sizeof自动计算;memset(buffer, 0, sizeof(buffer)); // 精确填充

总结:memset 按字节批量赋值,适合快速初始化字符数组或清零内存;避免用于非字符类型(如int/float)的非零赋值和越界操作,否则导致数值异常或程序崩溃!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值