这个头文件提供 字符串操作 的相关功能。例如字符串拼接,字符串裁剪,字符串搜索等。
| 函数 | 标准 | 说明 |
|---|---|---|
| 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