国际访客建议访问 Primers 编程伙伴 国际版站点 > C 教程 > string.h 以获得更好的体验。

# C 语言标准库头文件 string.h

请查看 C 语言标准库头文件列表 了解更多相关 API。

这个头文件提供 字符串操作 的相关功能。例如字符串拼接,字符串裁剪,字符串搜索等。

# 函数

函数 标准 说明
strlen C89 获取字符串长度
strcpy C89 复制字符串
strncpy C89 复制字符串,不超过指定长度
strcat C89 拼接字符串
strncat C89 拼接字符串,不超过指定长度
strcmp C89 比较字符串
strncmp C89 比较字符串,不超过指定长度
strdup C23 分配内存并复制字符串
strndup C23 分配内存并复制字符串,不超过指定长度
strxfrm C89 按照语言环境转换字符串
strcoll C89 按照语言环境比较字符串
strchr C89 在字符串中查找某个字符第一次出现的位置
strrchr C89 在字符串中查找某个字符最后一次出现的位置
strstr C89 在字符串中查找某个子串第一次出现的位置
strspn C89 计算字符串完全由指定字符集合中的字符组成的前缀的长度
strcspn C89 计算字符串不包含指定字符集合中的字符的前缀的长度
strpbrk C89 在字符串中查找某个字符集合中的字符首次出现的位置
strtok C89 将字符串按照指定子串分割,返回下一个 token
memchr C89 在内存块中查找字符
memcmp C89 内存块比较
memset C89 用指定的值填满内存块
memcpy C89 复制内存块,不可重叠
memmove C89 复制内存块,可以重叠
strerror C89 获取错误码的文本说明
安全函数 标准 说明
strcpy_s C11 复制字符串
strncpy_s C11 复制字符串,不超过指定长度
strcat_s C11 拼接字符串
strncat_s C11 拼接字符串,不超过指定长度
strtok_s C11 将字符串按照指定字串分割,返回下一个 token
memset_s C11 用指定的值填满内存块
memcpy_s C11 复制内存块,不可重叠
memmove_s C11 移动内存块,可以重叠
strerror_s C11 获取错误码的文本说明
strerrorlen_s C11 获取错误码的文本说明的长度
其它函数 标准 说明
memset_explicit C23 用指定的值填满内存块,不会因编译器优化而被省略

# 推荐阅读

# 示例

#include <stdio.h>
#include <string.h>  // 包含字符串操作函数

int main(void) {
    // 1. strlen - 获取字符串长度
    char str1[] = "Hello, World!";
    printf("1. strlen(\"%s\") = %lu\n", str1, strlen(str1));
    
    // 2. strcpy - 字符串复制
    char dest[50];
    strcpy(dest, str1);
    printf("2. strcpy: %s\n", dest);
    
    // 3. strncpy - 安全字符串复制
    char dest2[10];
    strncpy(dest2, str1, sizeof(dest2)-1);
    dest2[sizeof(dest2)-1] = '\0';  // 确保以null结尾
    printf("3. strncpy: %s\n", dest2);
    
    // 4. strcat - 字符串连接
    char str2[50] = "Welcome ";
    strcat(str2, "to C programming!");
    printf("4. strcat: %s\n", str2);
    
    // 5. strncat - 安全字符串连接
    char str3[20] = "Hello";
    strncat(str3, " World!!!", 6);  // 只连接前6个字符
    printf("5. strncat: %s\n", str3);
    
    // 6. strcmp - 字符串比较
    char str4[] = "apple";
    char str5[] = "banana";
    int result = strcmp(str4, str5);
    printf("6. strcmp(\"%s\", \"%s\") = %d\n", str4, str5, result);
    
    // 7. strncmp - 比较前n个字符
    result = strncmp("abc123", "abc456", 3);
    printf("7. strncmp(\"abc123\", \"abc456\", 3) = %d\n", result);
    
    // 8. strchr - 查找字符首次出现位置
    char *ptr = strchr(str1, 'W');
    printf("8. strchr(\"%s\", 'W') found at position: %ld\n", str1, ptr - str1);
    
    // 9. strstr - 查找子字符串
    ptr = strstr("This is a test", "is");
    printf("9. strstr(\"This is a test\", \"is\") found at position: %ld\n", ptr - "This is a test");
    
    // 10. memset - 内存设置
    char buffer[10];
    memset(buffer, 'A', sizeof(buffer)-1);
    buffer[sizeof(buffer)-1] = '\0';
    printf("10. memset: %s\n", buffer);
    
    // 11. memcpy - 内存复制
    char src[] = "Memory copy";
    char dest3[20];
    memcpy(dest3, src, strlen(src)+1);
    printf("11. memcpy: %s\n", dest3);
    
    // 12. memcmp - 内存比较
    int arr1[] = {1, 2, 3};
    int arr2[] = {1, 2, 4};
    result = memcmp(arr1, arr2, sizeof(arr1));
    printf("12. memcmp(arr1, arr2) = %d\n", result);
    
    return 0;
}

运行结果:

1. strlen("Hello, World!") = 13
2. strcpy: Hello, World!
3. strncpy: Hello, Wo
4. strcat: Welcome to C programming!
5. strncat: Hello World
6. strcmp("apple", "banana") = -1
7. strncmp("abc123", "abc456", 3) = 0
8. strchr("Hello, World!", 'W') found at position: 7
9. strstr("This is a test", "is") found at position: 2
10. memset: AAAAAAAAA
11. memcpy: Memory copy
12. memcmp(arr1, arr2) = -1
本文 更新于: 2025-11-27 09:38:07 创建于: 2025-11-27 09:38:07