以下是 C 标准库中常用字符串操作函数的详细说明:
1. strlen
size_t strlen(const char *str);
- 功能:计算字符串长度(不包括结尾的空字符
\0
)。 - 参数:
str
:指向以 null 结尾的字符串的指针。
- 返回值:
- 返回字符串
str
的长度(类型为size_t
),即第一个空字符\0
前的字符数。
- 返回字符串
2. strcpy
char *strcpy(char *dest, const char *src);
- 功能:将
src
字符串复制到dest
中(包括结尾的\0
)。 - 参数:
dest
:目标缓冲区,用于存储复制后的字符串。src
:源字符串,必须是 null 结尾。
- 返回值:
- 返回指向
dest
的指针。
- 返回指向
⚠️ 注意:
dest
必须足够大以容纳src
的内容,否则会导致缓冲区溢出。更安全的替代是strncpy()
。
3. strncpy
char *strncpy(char *dest, const char *src, size_t n);
- 功能:最多复制
n
个字符从src
到dest
。 - 参数:
dest
:目标缓冲区。src
:源字符串。n
:要复制的最大字符数。
- 返回值:
- 返回指向
dest
的指针。
- 返回指向
- 注意:
- 如果
src
的长度小于n
,则会在dest
后面填充空字符\0
直到总长度为n
。 - 如果
src
长度大于等于n
,则dest
不会被自动添加终止符\0
。
- 如果
4. strcat
char *strcat(char *dest, const char *src);
- 功能:将
src
追加到dest
的末尾。 - 参数:
dest
:目标字符串,必须是 null 结尾,并且有足够空间容纳追加的内容。src
:源字符串,被追加到dest
。
- 返回值:
- 返回指向
dest
的指针。
- 返回指向
⚠️ 注意:使用时容易造成缓冲区溢出。更安全的替代是
strncat()
。
5. strncat
char *strncat(char *dest, const char *src, size_t n);
- 功能:最多将
src
的前n
个字符追加到dest
的末尾,并在最后加上终止符\0
。 - 参数:
dest
:目标字符串。src
:源字符串。n
:要追加的最大字符数。
- 返回值:
- 返回指向
dest
的指针。
- 返回指向
6. strcmp
int strcmp(const char *s1, const char *s2);
- 功能:按字典顺序比较两个字符串。
- 参数:
s1
和s2
:待比较的两个字符串。
- 返回值:
- 小于 0:如果
s1
在字典上小于s2
。 - 等于 0:如果
s1
等于s2
。 - 大于 0:如果
s1
在字典上大于s2
。
- 小于 0:如果
7. strncmp
int strncmp(const char *s1, const char *s2, size_t n);
- 功能:比较两个字符串的前
n
个字符。 - 参数:
s1
和s2
:待比较的两个字符串。n
:要比较的最大字符数。
- 返回值:
- 同
strcmp
,但只比较前n
个字符。
- 同
8. strstr
char *strstr(const char *haystack, const char *needle);
- 功能:查找子字符串
needle
在haystack
中首次出现的位置。 - 参数:
haystack
:主字符串。needle
:要查找的子字符串。
- 返回值:
- 成功:返回指向第一次出现子串起始位置的指针。
- 失败:返回
NULL
。
9. strchr
char *strchr(const char *str, int c);
- 功能:查找字符
c
在字符串str
中首次出现的位置。 - 参数:
str
:字符串。c
:要查找的字符(通常传入char
类型,但函数接受int
)。
- 返回值:
- 成功:返回指向该字符的指针。
- 失败:返回
NULL
。
10. strrchr
char *strrchr(const char *str, int c);
- 功能:查找字符
c
在字符串str
中最后一次出现的位置。 - 参数:
str
:字符串。c
:要查找的字符。
- 返回值:
- 成功:返回指向该字符最后一次出现的指针。
- 失败:返回
NULL
。
11. strdup
char *strdup(const char *s);
- 功能:复制字符串
s
并动态分配内存保存副本。 - 参数:
s
:原始字符串。
- 返回值:
- 成功:返回新分配的字符串副本指针(需用
free()
释放)。 - 失败:返回
NULL
。
- 成功:返回新分配的字符串副本指针(需用
⚠️ 注意:不是 ANSI C 标准的一部分,但在 POSIX 和 GNU 编译器中广泛支持。
12. strtok
char *strtok(char *str, const char *delim);
- 功能:将字符串
str
按照分隔符delim
分割成多个 token。 - 参数:
str
:初始字符串(第一次调用传入;后续传入 NULL)。delim
:包含所有作为分隔符的字符。
- 返回值:
- 每次调用返回一个 token 指针,没有更多 token 时返回
NULL
。
- 每次调用返回一个 token 指针,没有更多 token 时返回
⚠️ 注意:此函数会修改原字符串,插入
\0
来分割 token。