<string.h>
是 C 标准库中用于处理字符串的头文件,提供了一系列函数来操作 C 风格的字符串(以 null 结尾的字符数组)。下面是 <string.h>
中一些常用函数的详细介绍。
1. 字符串操作函数
1.1 复制字符串
char *strcpy(char *dest, const char *src);
将字符串
src
复制到dest
。dest
必须有足够的空间来存储src
。
char dest[20];
strcpy(dest, "Hello, World!");
1.2 复制字符串(安全版本)
char *strncpy(char *dest, const char *src, size_t n);
将
src
的前n
个字符复制到dest
,如果src
长度小于n
,dest
其余部分将填充为\0
。
char dest[20];
strncpy(dest, "Hello", 5);
2. 拼接字符串
char *strcat(char *dest, const char *src);
将字符串
src
拼接到dest
的末尾。dest
必须有足够的空间来容纳结果字符串。
char dest[20] = "Hello, ";
strcat(dest, "World!");
2.1 拼接字符串(安全版本)
char *strncat(char *dest, const char *src, size_t n);
将
src
的前n
个字符拼接到dest
的末尾。
char dest[20] = "Hello, ";
strncat(dest, "World!", 3);
3. 字符串长度
size_t strlen(const char *str);
返回字符串
str
的长度(不包括结束符\0
)。
size_t len = strlen("Hello");
4. 字符串比较
int strcmp(const char *str1, const char *str2);
字符串
str1
和str2
进行字典序比较,返回值:- 小于零:
str1
小于str2
- 零:两者相等
- 大于零:
str1
大于str2
- 小于零:
if (strcmp("apple", "banana") < 0) {
// "apple" 在字典序上小于 "banana"
}
4.1 字符串比较(安全版本)
int strncmp(const char *str1, const char *str2, size_t n);
比较
str1
和str2
的前n
个字符。
if (strncmp("Hello", "Hello, World!", 5) == 0) {
// 前 5 个字符相等
}
5. 查找字符和字符串
char *strchr(const char *str, int c);
返回指向字符串
str
中第一次出现字符c
的指针,如果未找到则返回NULL
。
char *p = strchr("Hello, World!", 'W');
char *strstr(const char *haystack, const char *needle);
返回
haystack
中第一次出现needle
的指针,如果未找到则返回NULL
。
char *p = strstr("Hello, World!", "World");
6. 字符串转为整数
虽然不在 <string.h>
中,通常与字符串处理密切相关。可以使用 <stdlib.h>
中的 atoi
、atof
、strtol
等函数将字符串转换为数值类型。
7. 其他辅助函数
void *memcpy(void *dest, const void *src, size_t n);
从
src
复制n
个字节到dest
。void *memset(void *str, int c, size_t n);
将
str
中的前n
个字符设置为c
。
示例程序
下面是一个使用 <string.h>
的简单示例,展示了如何处理字符串:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = "World";
char str3[40];
// 字符串拼接
strcpy(str3, str1);
strcat(str3, ", ");
strcat(str3, str2);
printf("Concatenated string: %s\n", str3);
// 字符串长度
printf("Length of str3: %zu\n", strlen(str3));
// 字符串比较
if (strcmp(str1, str2) < 0) {
printf("'%s' is less than '%s'\n", str1, str2);
}
// 查找字符
char *p = strchr(str3, 'W');
if (p != NULL) {
printf("Found 'W' in str3: %s\n", p);
}
return 0;
}
注意事项
- 确保目标数组有足够的空间来存储复制或拼接后的字符串,以避免缓冲区溢出。
- C 字符串以 null 字符 (
\0
) 结束,始终确保在字符串操作时正确处理这个结束符。 - 使用安全版本的
strncpy
和strncat
等函数可以减少潜在的安全风险,特别是在处理不受信任的数据时。
通过了解和使用 <string.h>
中的函数,开发者可以有效地进行字符串处理,构建更强大的 C 程序。