<string.h> 是 C 标准库中的一个非常重要的头文件,专门用于字符串的操作。它提供了大量的函数,用于处理 C 语言中的字符串,包括字符串的复制、连接、比较、查找等操作。


📖 目录

  1. <string.h> 简介
  2. 常用函数
  3. 字符串操作函数
  4. 内存操作函数
  5. 示例代码
  6. 参考资料

1️⃣ <string.h> 简介

<string.h> 提供了处理字符串和内存的函数。在 C 语言中,字符串本质上是以 \0(空字符)结尾的字符数组,因此这些函数大多是基于字符数组来实现的。<string.h> 中的函数不仅用于操作字符串,还可以操作内存块,进行拷贝、比较、查找等操作。

功能

  • 字符串复制、连接、比较、查找。
  • 内存的拷贝、设置和比较。
  • 字符串长度、查找子串等。

2️⃣ 常用函数

📌 字符串操作函数

  • strlen:计算字符串的长度。
  • strcmp:比较两个字符串。
  • strcpy:复制一个字符串。
  • strcat:连接两个字符串。
  • strchr:查找字符在字符串中的第一次出现。
  • strstr:查找子字符串。
  • strncpy:复制指定长度的字符串。
  • strncat:连接指定长度的字符串。

📌 内存操作函数

  • memcpy:复制内存块。
  • memmove:移动内存块(支持重叠区域)。
  • memset:设置内存区域的值。
  • memcmp:比较两个内存块。

3️⃣ 字符串操作函数

📌 strlen

strlen 用于计算字符串的长度,返回字符串中字符的个数(不包括空字符 \0)。

原型

size_t strlen(const char *str);

  • 参数str:要计算长度的字符串。
  • 返回值:字符串的长度(不包括 \0)。

示例

char str[] = "Hello, World!";
size_t len = strlen(str);  // len = 13
printf("Length: %zu\n", len);

📌 strcmp

strcmp 用于比较两个字符串的大小。比较是基于字典顺序进行的。

原型

int strcmp(const char *str1, const char *str2);

  • 参数
    • str1:第一个字符串。
    • str2:第二个字符串。
  • 返回值
    • 返回 0 表示两字符串相等。
    • 返回负值表示 str1 小于 str2
    • 返回正值表示 str1 大于 str2

示例

char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);  // result < 0

📌 strcpy

strcpy 用于将一个字符串复制到另一个字符串。

原型

char *strcpy(char *dest, const char *src);

  • 参数
    • dest:目标字符串,存放复制内容。
    • src:源字符串,提供要复制的内容。
  • 返回值:返回 dest 字符串的指针。

示例

char src[] = "Hello";
char dest[10];
strcpy(dest, src);  // dest = "Hello"

📌 strcat

strcat 用于将一个字符串追加到另一个字符串的末尾。

原型

char *strcat(char *dest, const char *src);

  • 参数
    • dest:目标字符串,追加内容。
    • src:源字符串,提供要追加的内容。
  • 返回值:返回 dest 字符串的指针。

示例

char str1[20] = "Hello";
char str2[] = " World!";
strcat(str1, str2);  // str1 = "Hello World!"

📌 strchr

strchr 用于查找字符在字符串中的第一次出现。

原型

char *strchr(const char *str, int ch);

  • 参数
    • str:要搜索的字符串。
    • ch:要查找的字符。
  • 返回值:返回指向字符 ch 在字符串中第一次出现位置的指针,如果没有找到返回 NULL

示例

char str[] = "Hello World!";
char *ptr = strchr(str, 'o');  // ptr 指向第一个 'o'

📌 strstr

strstr 用于查找子字符串在字符串中的第一次出现。

原型

char *strstr(const char *haystack, const char *needle);

  • 参数
    • haystack:要搜索的主字符串。
    • needle:要查找的子字符串。
  • 返回值:返回指向子字符串第一次出现位置的指针,如果没有找到返回 NULL

示例

char str[] = "Hello, World!";
char *ptr = strstr(str, "World");  // ptr 指向 "World"


4️⃣ 内存操作函数

📌 memcpy

memcpy 用于复制指定大小的内存块。

原型

void *memcpy(void *dest, const void *src, size_t n);

  • 参数
    • dest:目标内存块。
    • src:源内存块。
    • n:要复制的字节数。
  • 返回值:返回指向目标内存块的指针。

示例

char src[] = "Hello";
char dest[6];
memcpy(dest, src, 6);  // dest = "Hello"

📌 memmove

memmove 用于复制内存块,支持内存区域重叠。

原型

void *memmove(void *dest, const void *src, size_t n);

  • 参数
    • dest:目标内存块。
    • src:源内存块。
    • n:要复制的字节数。
  • 返回值:返回指向目标内存块的指针。

📌 memset

memset 用于设置内存块的内容。

原型

void *memset(void *str, int c, size_t n);

  • 参数
    • str:目标内存块。
    • c:要设置的值(以字节为单位)。
    • n:要设置的字节数。
  • 返回值:返回指向目标内存块的指针。

5️⃣ 示例代码

📌 示例:字符串操作

以下代码展示了如何使用 strcpystrcat 函数。

#include <stdio.h>
#include <string.h>

int main() {
    char src[] = "Hello";
    char dest[20];

    strcpy(dest, src);  // 将 src 复制到 dest
    printf("Copied string: %s\n", dest);

    strcat(dest, " World!");  // 将 " World!" 连接到 dest 后
    printf("Concatenated string: %s\n", dest);

    return 0;
}

输出

Copied string: Hello
Concatenated string: Hello World!


6️⃣ 参考资料

📖 C 标准库 – <string.h> 官方文档
📖 GNU C Library – string.h
📖 ISO C 标准(PDF)


📌 总结

<string.h> 是 C 标准库中用于处理字符串和内存操作的头文件。它提供了字符串复制、连接、查找、比较等操作函数,并且也有内存操作函数如 memcpymemset,极大地简化了 C 语言中的字符串和内存操作。