欢迎光临
我们一直在努力

字符串相关函数总结

一、字符串本质

  • 以 \\0(ASCII 0)结尾的字符数组
  • 没有真正的字符串类型,靠结尾标记判断长度
  • 当字符数组(字符串)作为函数参数传递时:数组名会自动、隐式地转换成指向数组首元素的 char * 指针。

二、常用标准库头文件

#include <string.h>

三、最常用字符串函数(必背)

1. strlen —— 求字符串长度

size_t strlen(const char *s);

  • 不计末尾 \\0
  • 和 sizeof(数组) 不一样:sizeof 算整块内存,strlen 算有效字符

2. strcpy —— 字符串拷贝

char *strcpy(char *dest, const char *src);

  • 把 src 连同 \\0 一起拷过去
  • 不安全:不检查目标空间够不够,容易越界

3. strncpy —— 安全版拷贝

char *strncpy(char *dest, const char *src, size_t n);

  • 最多拷 n 个字节
  • 注意:不一定自动补 \\0,用完最好手动加

4. strcat —— 字符串拼接

char *strcat(char *dest, const char *src);

  • 把 src 拼到 dest 后面
  • 同样不安全,前面的可能空间不够,会造成溢出

5. strncat —— 安全拼接

char *strncat(char *dest, const char *src, size_t n);

  • 最多追加 n 个字符
  • 会自动补 \\0,比 strncpy 友好

6. strcmp —— 字符串比较

int strcmp(const char *s1, const char *s2);
逐字符按 ASCII 比较
返回值:
<0: s1 < s2
=0: s1 == s2
0: s1 > s2

    • 不能用 == 比较字符串,必须用 strcmp

    • ==比较的是地址,而不是对应的值

    7. strncmp —— 前n个字符比较

    int strncmp(const char *s1, const char *s2, size_t n);

    8. strchr / strrchr —— 查找字符

    char *strchr(const char *s, int c); // 第一次出现
    char *strrchr(const char *s, int c); // 最后一次出现

    • 找到返回地址,没找到返回 NULL

    9. strstr —— 查找子串

    char *strstr(const char *haystack, const char *needle);

    • 在大串里找小串
    • 返回子串第一次出现的位置

    10. memset —— 按字节赋值

    void *memset(void *s, int c, size_t n);

    • 常用于清空数组:

    char buf[100];
    memset(buf, 0, sizeof(buf));

    四、极易出错的点(高频考点)

  • 字符串必须以 \\0 结尾,否则 strlen、strcpy 等都会乱跑、越界
  • == 比较的是地址,不是内容,比较字符串必须用 strcmp
  • strcpy/strcat 不安全,大量使用容易造成缓冲区溢出
  • strlen 返回值是 size_t(无符号),做减法要小心负数问题
  • 字符数组如果没有存下 \\0 的空间,就不是合法字符串
  • 五、简单记忆口诀

    • 求长度用 strlen
    • 拷贝用 strcpy/strncpy
    • 拼接用 strcat/strncat
    • 比较用 strcmp
    • 找字符用 strchr
    • 找子串用 strstr
    • 清空用 memset
    赞(0)
    未经允许不得转载:171主机测评 » 字符串相关函数总结
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址