C语言字符串详解:从基础到常用函数

📅 发布时间:2026/8/1 18:58:56
C语言字符串详解:从基础到常用函数 1. C语言字符串基础在C语言中字符串实际上是使用空字符\0结尾的一维字符数组。空字符Null character又称结束符缩写NUL是一个数值为0的控制字符。\0是转义字符告诉编译器这不是字符0而是空字符。1.1 字符串的声明与初始化下面的声明和初始化创建了一个RUNOOB字符串。由于在数组末尾存储了空字符\0所以字符数组的大小比单词RUNOOB的字符数多一个char site[7] {R, U, N, O, O, B, \0};依据数组初始化规则可以简写为char site[] RUNOOB;实际上C编译器会在初始化数组时自动把\0放在字符串的末尾所以不需要手动添加。1.2 字符串的内存表示以下是C/C中字符串的内存表示// 内存布局示例 // char str[] Hello; // 内存: | H | e | l | l | o | \0 | // 索引: 0 1 2 3 4 51.3 字符串输出示例让我们尝试输出上面的字符串#include stdio.h int main() { char site[7] {R, U, N, O, O, B, \0}; printf(菜鸟教程: %s\n, site); return 0; }当上面的代码被编译和执行时会产生下列结果菜鸟教程: RUNOOB2. C语言常用字符串函数C语言标准库提供了大量操作字符串的函数这些函数定义在string.h头文件中。2.1 常用字符串函数列表序号函数功能描述1strcpy(s1, s2)复制字符串s2到字符串s12strcat(s1, s2)连接字符串s2到字符串s1的末尾3strlen(s1)返回字符串s1的长度不包括\04strcmp(s1, s2)比较字符串s1和s2相同返回0s1s2返回负数s1s2返回正数5strchr(s1, ch)返回指向字符串s1中字符ch第一次出现位置的指针6strstr(s1, s2)返回指向字符串s1中字符串s2第一次出现位置的指针2.2 字符串函数使用示例#include stdio.h #include string.h int main() { char str1[14] runoob; char str2[14] google; char str3[14]; int len; /* 复制str1到str3 */ strcpy(str3, str1); printf(strcpy(str3, str1): %s\n, str3); /* 连接str1和str2 */ strcat(str1, str2); printf(strcat(str1, str2): %s\n, str1); /* 连接后str1的总长度 */ len strlen(str1); printf(strlen(str1): %d\n, len); return 0; }当上面的代码被编译和执行时会产生下列结果strcpy(str3, str1): runoob strcat(str1, str2): runoobgoogle strlen(str1): 123. 注意事项与最佳实践3.1 缓冲区溢出问题使用字符串函数时要注意缓冲区大小避免溢出// 危险示例 char dest[10] Hello; char src[20] World, this is too long!; strcat(dest, src); // 缓冲区溢出 // 安全示例使用strncat strncat(dest, src, sizeof(dest) - strlen(dest) - 1);3.2 字符串长度计算strlen()函数计算的是字符串的实际长度不包括结尾的\0char str[] Hello; int length strlen(str); // 返回5不是63.3 字符串比较strcmp()比较的是字符串内容不是地址char str1[] Hello; char str2[] Hello; char *str3 Hello; printf(%d\n, strcmp(str1, str2)); // 0相同 printf(%d\n, str1 str2); // 0地址不同 printf(%d\n, strcmp(str1, str3)); // 0内容相同4. 总结C语言中的字符串是以空字符\0结尾的字符数组。理解字符串的内存表示和常用字符串函数是C语言编程的基础。在实际开发中要注意缓冲区安全合理使用字符串函数并理解字符串与字符数组的区别。您可以在C标准库中找到更多字符串相关的函数如strncpy、strncat、strncmp等这些函数提供了更安全的缓冲区操作方式。