字符串并不是 C 语言内置的基础类型,本质上就是字符数组。想要获取长度、完成复制、拼接或是对比操作,都需要调用库函数。接下来介绍 <string.h> 中最常用的几组函数,结合示例逐一说明。

为什么需要 string.h

大部分字符串操作其实都能自己写循环实现,但那样啰嗦又容易出错。C 标准库在 <string.h> 里提供了成套的字符串处理函数,帮你把常见操作封装好。

使用前必须包含头文件:

#include <string.h>

最常用的字符串函数

函数说明
strlen()计算字符串长度
strcpy()把一个字符串复制到另一个
strcat()拼接(连接)两个字符串
strcmp()比较两个字符串
strlwr()把字符串转成小写
strupr()把字符串转成大写

逐个看用法

strlen():求长度

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello";
    printf("长度 = %lu\n", strlen(str));   // 5,不算结尾的 \0
    return 0;
}

strcpy():复制

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "World";
    char dst[20];
    strcpy(dst, src);        // 把 src 复制到 dst
    printf("%s\n", dst);     // World
    return 0;
}

注意目标数组要够大,能装下源字符串再加结尾的 \0,否则溢出。

strcat():拼接

#include <stdio.h>
#include <string.h>

int main() {
    char s1[20] = "Hello ";
    char s2[] = "World";
    strcat(s1, s2);          // 把 s2 接到 s1 末尾
    printf("%s\n", s1);      // Hello World
    return 0;
}

s1 的目标空间要留够,否则拼接时会越界。

strcmp():比较

返回值 0 表示相等,负数表示第一个串小,正数表示第一个串大(按 ASCII 逐字符比):

#include <stdio.h>
#include <string.h>

int main() {
    if (strcmp("abc", "abc") == 0)
        printf("相等\n");
    if (strcmp("abc", "abd") < 0)
        printf("abc 在 abd 之前\n");
    return 0;
}

注意:比字符串要用 strcmp(),不能用 ==,== 比的是两个指针(地址),不是内容。

gets() 和 puts()

严格说它们不归 string.h 管,但也是字符串输入输出的一对常用函数,定义在 stdio.h 里:

#include <stdio.h>

int main() {
    char name[30];
    printf("输入姓名: ");
    gets(name);       // 从用户输入读一行字符串
    printf("姓名: ");
    puts(name);       // 输出字符串并自动换行
    return 0;
}

注意 gets() 不检查缓冲区大小,历史上出过著名的缓冲区溢出漏洞,现代编译器常提示用 fgets() 替代。

字符串的操作交给 string.h,strlen 量长度、strcpy 复制、strcat 拼接、strcmp 比较,比较要用函数,不能直接用 ==。