<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 程序。