memset手写c
时间: 2025-08-08 22:09:30 浏览: 1
在C语言中,手动实现类似于标准库函数 `memset` 的功能,可以通过逐字节操作内存块的方式完成。`memset` 的主要功能是将一段内存区域的前 `n` 个字节填充为指定值(通常是以 `unsigned char` 类型进行填充)。
以下是一个手写的 `MyMemset` 函数实现:
```c
#include <stdio.h>
#include <assert.h>
void* MyMemset(void* dest, int c, size_t count) {
assert(dest != NULL && count >= 0);
char* p = (char*)dest;
unsigned int i = 0;
while (i < count) {
p[i++] = c;
}
return (void*)p;
}
```
### 实现说明
- **参数说明**:
- `dest`:指向目标内存区域的指针。
- `c`:要设置的值,以 `int` 形式传入,但函数内部将其转换为 `unsigned char`。
- `count`:要设置的字节数。
- **逐字节赋值**:
- 函数将 `dest` 强制转换为 `char*` 指针,因为 `char` 类型的大小为 1 字节,便于逐字节操作。
- 使用循环逐个字节进行赋值,直到完成 `count` 个字节的填充。
- **断言检查**:
- 使用 `assert` 确保传入的指针 `dest` 不为 `NULL`,并且 `count` 为非负数,以防止非法内存访问。
### 示例用法
```c
int main() {
char a[256];
printf("赋值10个\\0\n");
MyMemset(a, '\0', 10);
puts(a);
printf("赋值6个b\n");
MyMemset(a, 'b', 6);
puts(a);
printf("赋值9个A\n");
puts((char*)MyMemset(a, 'A', 9));
}
```
### 注意事项
- 该实现适用于基本的内存填充需求,但未考虑性能优化(如按字长对齐内存访问)。
- 在实际项目中,应优先使用标准库中的 `memset` 函数,因其经过高度优化,且具备良好的可移植性[^1]。
---
阅读全文
相关推荐



















