buffer_addr是一个变量,其中存的是一个申请好的buffer的地址,现在我需要将64字节的0写入这个buffer并保留64字节空余(利用for循化写入0),给出代码
时间: 2024-10-28 15:10:43 浏览: 11
在C语言中,你可以使用`memset()`函数来一次性填充整个缓冲区,然后保留指定的字节数。这里是一个简单的示例:
```c
#include <stdio.h>
#include <string.h>
void fill_and_reserve(void* buffer_addr, size_t total_size, size_t reserve_size) {
char* buffer = (char*)buffer_addr;
// 将整个缓冲区填充为0
memset(buffer, 0, total_size);
// 如果预留空间小于或等于已填充的大小,不需要额外操作
if (reserve_size <= total_size - sizeof(char)) {
return; // 或者直接跳过预留区域
}
// 计算实际写入0的位置
char* end_of_data = buffer + total_size - reserve_size;
// 使用循环写入0,直到到达预留区域的开始
for (size_t i = 0; i < reserve_size; ++i, ++end_of_data) {
*end_of_data = 0;
}
}
int main() {
void* buffer_addr = malloc(64); // 假设已经成功申请了64字节的内存
if (!buffer_addr) {
printf("Memory allocation failed.\n");
return 1;
}
size_t total_size = 64; // 总大小
size_t reserve_size = 64; // 预留大小
fill_and_reserve(buffer_addr, total_size, reserve_size);
// 在此之后,buffer_addr的前total_size字节被填满0,后reserve_size字节保留原始数据
free(buffer_addr);
阅读全文