strlen - 计算字符串长度
strlen
函数用于计算字符串的有效长度(不包含字符串结束符 '\0'
)。
size_t strlen(const char *str);
参数:str 为要计算长度的字符串。
返回值:返回字符串的长度(类型为 size_t,即无符号整数)。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
printf("字符串长度: %zu\n", strlen(str)); // 输出:13
return 0;
}
注意事项:
字符串必须以 '\0' 结尾,否则会导致未定义行为(可能返回随机值)。
返回值为无符号类型,避免与有符号整数直接比较(如 if (strlen(str) < -1) 会出错)。
strcpy - 字符串复制
strcpy
函数用于将一个字符串复制到另一个字符数组中。
c
char* strcpy(char *dest, const char *src);
参数:dest 为目标数组,src 为源字符串。
返回值:返回指向目标数组的指针(即 dest)。
#include <stdio.h>
#include <string.h>
int main() {
char src[] = "Hello";
char dest[10];
strcpy(dest, src);
printf("复制后的字符串: %s\n", dest); // 输出:Hello
return 0;
}
注意事项:
目标数组必须足够大,能容纳源字符串(包括 '\0')。
若目标数组空间不足,会导致缓冲区溢出(如 char dest[3]; strcpy(dest, "Hello");)。
strcat - 字符串拼接
strcat
函数用于将一个字符串追加到另一个字符串的末尾。
char* strcat(char *dest, const char *src);
参数:dest
为目标字符串(需已包含 '\0'
),src
为要追加的字符串。
返回值:返回指向目标字符串的指针(即 dest
)。
#include <stdio.h>
#include <string.h>
int main() {
char dest[20] = "Hello, ";
char src[] = "world!";
strcat(dest, src);
printf("拼接后的字符串: %s\n", dest); // 输出:Hello, world!
return 0;
}
注意事项:
目标数组必须足够大,能容纳原字符串和追加的字符串(包括 '\0')。
目标字符串必须以 '\0' 结尾,否则会导致未定义行为。
strcmp - 字符串比较
strcmp
函数用于按字典序比较两个字符串。
int strcmp(const char *str1, const char *str2);
参数:str1 和 str2 为要比较的两个字符串。
返回值: 若 str1 小于 str2,返回负数(通常为 -1)。
若 str1 等于 str2,返回 0。
若 str1 大于 str2,返回正数(通常为 1)。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "banana";
int result = strcmp(str1, str2);
if (result < 0) {
printf("'%s' 小于 '%s'\n", str1, str2);
} else if (result > 0) {
printf("'%s' 大于 '%s'\n", str1, str2);
} else {
printf("两字符串相等\n");
}
return 0;
}
注意事项:
比较是基于字符的 ASCII 值进行的(如 'A' 的 ASCII 值为 65,'a' 为 97)。
比较会持续到遇到不同字符或 '\0' 为止。
strstr - 子串查找
strstr
函数用于在一个字符串中查找另一个子串的首次出现位置。
char* strstr(const char *str, const char *substr);
参数:str 为要搜索的字符串,substr 为要查找的子串。
返回值: 若找到子串,返回指向该子串的指针。
若未找到,返回 NULL。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, world!";
char substr[] = "world";
char* result = strstr(str, substr);
if (result != NULL) {
printf("子串位置: %ld\n", result - str); // 输出:7(从0开始的索引)
} else {
printf("未找到子串\n");
}
return 0;
}
注意事项:
若子串为空字符串(""),函数返回原字符串 str。
搜索区分大小写(如 "WORLD" 与 "world" 不同)。
strtok - 字符串分割
strtok
函数用于将字符串按指定分隔符分割成多个子串(token)
char* strtok(char *str, const char *delim);
参数:
str:首次调用时传入要分割的字符串,后续调用应传入 NULL。
delim:包含所有分隔符的字符串(如 ",.-" 表示逗号、点和连字符均可作为分隔符)。
返回值:
成功时返回指向下一个 token 的指针。
无更多 token 时返回 NULL。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello,world!-test";
const char* delim = ",!-";
char* token = strtok(str, delim);
while (token != NULL) {
printf("Token: %s\n", token);
token = strtok(NULL, delim); // 继续处理剩余部分
}
return 0;
}
运行结果:
Token: Hello
Token: world
Token: test
注意事项:
strtok 会修改原字符串(将找到的分隔符替换为 '\0')。
函数使用静态变量记录当前位置,不支持多线程操作(可考虑使用 strtok_r 或 strtok_s 替代)。
strerror - 获取错误信息
strerror - 获取错误信息
strerror
函数用于将错误码(errno
)转换为对应的错误信息字符串。
char* strerror(int errnum);
参数:errnum 为错误码(通常是全局变量 errno 的值)。
返回值:返回指向错误信息字符串的指针。
#include <stdio.h>
#include <string.h>
#include <errno.h>
int main() {
FILE* file = fopen("nonexistent.txt", "r");
if (file == NULL) {
printf("打开文件失败: %s\n", strerror(errno));
// 输出:打开文件失败: No such file or directory
}
return 0;
}
注意事项:
使用前需包含 <errno.h> 和 <string.h>。
返回的字符串为静态分配,无需手动释放。
错误信息可能因系统环境而异(如 Linux 和 Windows 的错误描述不同)。