ADD: c-cpp dynamic-memory.md
This commit is contained in:
parent
1ef53884cd
commit
fd6f1af7a7
@ -1,8 +1,18 @@
|
||||
# c风格字符串
|
||||
|
||||
# c风格字符串
|
||||
`#include <cstring>`
|
||||
|
||||
```cpp
|
||||
---
|
||||
|
||||
## INDEX
|
||||
|
||||
- [字符串库函数](# std-string)
|
||||
- [内存操作标准库函数](# std-mem)
|
||||
- [与string容器转换](# to-string)
|
||||
|
||||
---
|
||||
|
||||
## **std-string**
|
||||
```c
|
||||
strcpy(buf1, "hello"); // 用后面的字符串覆盖前面的字符串
|
||||
strncpy(buf1, "hello", 5); // 增加指定长度
|
||||
|
||||
@ -16,15 +26,26 @@
|
||||
strstr(buf1, "hello"); // 返回第一次出现子串的指针
|
||||
|
||||
strtok(buf1, " "); // 分割字符串,返回分割过的字符串
|
||||
|
||||
memset(buf1, 0, sizeof(buf1));//覆写内存块
|
||||
|
||||
memcpy(buf1, "hello", 5); //复制内存块
|
||||
|
||||
memmove(buf1 + 1, buf1, 4); //移动5个字节到前一个位置
|
||||
```
|
||||
___注:未进行长度指定的函数有溢出风险 例如:strcpy___
|
||||
|
||||
---
|
||||
|
||||
## **std-mem**
|
||||
|
||||
- 内存操作函数与str系的最大不同是不检测EOF
|
||||
```c
|
||||
memset(buf1, 0, sizeof(buf1));//覆写内存块
|
||||
|
||||
memcpy(buf1, "hello", 5); //复制内存块,不处理内存重叠
|
||||
|
||||
memmove(buf1 + 1, buf1, 4); //移动5个字节到前一个位置,可处理重叠
|
||||
```
|
||||
- `int memcmp(const void *ptr1, const void *ptr2, size_t num);`
|
||||
- 比较函数,返回0表示相等
|
||||
|
||||
---
|
||||
|
||||
## 两种转换
|
||||
```cpp
|
||||
string str1;
|
||||
|
52
program/c_cpp/universal/dynamic-memory.md
Normal file
52
program/c_cpp/universal/dynamic-memory.md
Normal file
@ -0,0 +1,52 @@
|
||||
# 动态内存分配
|
||||
|
||||
---
|
||||
|
||||
## INDEX
|
||||
|
||||
- [C](# C)
|
||||
- [malloc](# malloc)
|
||||
- [calloc](# calloc)
|
||||
- [realloc](# realloc)
|
||||
- [free](#) : 传入动态分配的指针地址,记得释放完赋NULL
|
||||
- [CPP](# CPP)
|
||||
- [new](# new)
|
||||
- [delete](# delete)
|
||||
|
||||
---
|
||||
|
||||
## C
|
||||
|
||||
所有的函数声明于`<stdlib.h>`头文件中
|
||||
|
||||
---
|
||||
|
||||
### **malloc**
|
||||
|
||||
- 原型 `void *malloc(size_t size);`
|
||||
- 功能 : 用于分配指定字节数的内存块
|
||||
- 特点
|
||||
- 分配的内存是未初始化的,内容随机
|
||||
- 返回指向分配内存起始地址的void指针
|
||||
- 如果分配失败,返回NULL
|
||||
|
||||
---
|
||||
|
||||
### **calloc**
|
||||
|
||||
- 原型 `void *calloc(size_t num, size_t size);`
|
||||
- 特点
|
||||
- 比起 `malloc` 多了自动初始化
|
||||
|
||||
---
|
||||
|
||||
### **realloc**
|
||||
|
||||
- 原型 `void *realloc(void *ptr, size_t new_size);`
|
||||
- 功能 : 用于调整之前分配的内存块的大小
|
||||
- 特点
|
||||
- 可以扩大或缩小内存块
|
||||
- 新增部分不初始化
|
||||
- 如果ptr为NULL,等同于malloc
|
||||
- 可能返回新的指针地址(内存块可能被移动到新位置)
|
||||
- 如果`new_size`为0且ptr不为NULL,等同于free
|
Loading…
x
Reference in New Issue
Block a user