Cpp-cstring
1. 模块介绍
- cstring是C标准库的Cpp封装,用于内存操作与C风格的字符串操作(在这里只说内存操作)
- OK
2. memset(内存填充)
void* memset(void* ptr, int value, size_t num); // 给目标指针地址填充num_size大小的value字符
示例
// 1. 清空结构体
struct config {
int width;
int heigh;
std::string des;
}
config test; // 创建结构体变量
std::memset(&test, 0, sizeof(config)); // 取变量地址赋初值0
// 2. 填充缓冲区
int suffer[1000];
std::memset(suffer, 'A', 100);
3. memcpy(内存拷贝)
void* memcpy(void* dest, const void* src, size_t num); // 由源码copy到dist
示例
std::memcpy(dist, src, 5 * sizeof(int));
4. memcmp(内存比较)
int memcmp(const void* ptr1, const void* ptr2, size_t num); // 比较两个地址的数值
示例
// 1. 比较两个图片数据的哈希
unsigned char* hash1 = compute_hash(data1);
unsigned char* hash2 = compute_hash(data2);
if (std::memcmp(hash1, hash2, 32) == 0) // 比较 32 字节的哈希
fmt::print("图片内容相同\n");
// 2. 检查配置是否一致
if (std::memcmp(&config1, &config2, sizeof(Config)) != 0)
fmt::print("配置已更改\n");
5. memmove(移动内存)
void* memmove(void* dist, const void* src, size_t num); // 将指定字节数的源地址的数据移动到目标地址,与copy相比,能操作重复地址的内存
示例
int arr[] = {1, 2, 3, 4, 5, 6, 7};
// 将 arr[2..4] 移动到 arr[0..2]
std::memmove(arr, arr + 2, 3 * sizeof(int)); // arr = {3, 4, 5, 4, 5, 6, 7}