C 字符串与内存操作函数速查
目录
1 字符串/内存操作函数速查
| 函数 | 参数说明 | 作用 |
|---|---|---|
strlen(str) | str — 目标字符串 | 计算字符串长度,不包含 '\0' |
memmove(dst, src, n) | dst — 目标地址(destination)src — 源地址(source)n — 要移动的字节数 | 移动 n 字节,允许内存区域重叠 |
memcpy(dst, src, n) | dst — 目标地址(destination)src — 源地址(source)n — 要复制的字节数 | 复制 n 字节,不允许内存区域重叠(重叠时行为未定义) |
memset(dst, value, n) | dst — 目标地址(destination)value — 要填充的值(转为 unsigned char)n — 要填充的字节数 | 将一段内存的每个字节填充为指定值 |
strcpy(dst, src) | dst — 目标缓冲区(destination)src — 源字符串(source) | 复制 C 风格字符串,包括结尾的 '\0' |
strcmp(a, b) | a — 字符串 Ab — 字符串 B | 比较两个 C 风格字符串,相等返回 0 |
strchr(str, ch) | str — 被搜索的字符串ch — 要查找的字符 | 在字符串中查找字符,返回首次出现的位置指针 |
strstr(str, sub) | str — 被搜索的字符串(haystack)sub — 要查找的子串(needle) | 在字符串中查找子串,返回首次出现的位置指针 |
⚠️ 注意:
memmove和memcpy的区别——当src和dst的内存区域有重叠时,必须用memmove,因为它会先拷贝到临时缓冲区再写入,保证正确性;memcpy不处理重叠情况,可能导致数据损坏。
| 函数名 | 全称拆分 | 英文原意 |
|---|---|---|
| strlen | str = string;len = length | string length 字符串长度 |
| memmove | mem = memory;move | memory move 内存移动 |
| memcpy | mem = memory;cpy = copy | memory copy 内存复制 |
| memset | mem = memory;set | memory set 内存填充 |
| strcpy | str = string;cpy = copy | string copy 字符串复制 |
| strcmp | str = string;cmp = compare | string compare 字符串比较 |
| strchr | str = string;chr = character | string character 在字符串查找字符 |
| strstr | str = string;第二个 str = substring | string substring 在字符串查找子串 |
2 补充规律(方便记忆)
str开头 → 只处理「C 风格字符串」,依赖\0结束标记;mem开头 → 纯粹操作内存块,不识别字符串结束符,按字节数量处理;- 通用缩写约定:
cpy= copycmp= comparechr= characterlen= lengthsub= substring