约 8276 字

约 41 分钟

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

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

#函数

函数标准说明
strlenC89获取字符串长度
strcpyC89复制字符串
strncpyC89复制字符串,不超过指定长度
strcatC89拼接字符串
strncatC89拼接字符串,不超过指定长度
strcmpC89比较字符串
strncmpC89比较字符串,不超过指定长度
strdupC23分配内存并复制字符串
strndupC23分配内存并复制字符串,不超过指定长度
strxfrmC89按照语言环境转换字符串
strcollC89按照语言环境比较字符串
strchrC89在字符串中查找某个字符第一次出现的位置
strrchrC89在字符串中查找某个字符最后一次出现的位置
strstrC89在字符串中查找某个子串第一次出现的位置
strspnC89计算字符串完全由指定字符集合中的字符组成的前缀的长度
strcspnC89计算字符串不包含指定字符集合中的字符的前缀的长度
strpbrkC89在字符串中查找某个字符集合中的字符首次出现的位置
strtokC89将字符串按照指定子串分割,返回下一个 token
memchrC89在内存块中查找字符
memcmpC89内存块比较
memsetC89用指定的值填满内存块
memcpyC89复制内存块,不可重叠
memmoveC89复制内存块,可以重叠
strerrorC89获取错误码的文本说明
安全函数标准说明
strcpy_sC11复制字符串
strncpy_sC11复制字符串,不超过指定长度
strcat_sC11拼接字符串
strncat_sC11拼接字符串,不超过指定长度
strtok_sC11将字符串按照指定字串分割,返回下一个 token
memset_sC11用指定的值填满内存块
memcpy_sC11复制内存块,不可重叠
memmove_sC11移动内存块,可以重叠
strerror_sC11获取错误码的文本说明
strerrorlen_sC11获取错误码的文本说明的长度
其它函数标准说明
memset_explicitC23用指定的值填满内存块,不会因编译器优化而被省略

#推荐阅读

#示例

#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/7/12

作者: PlanC

创建: 2025/7/6