C 语言字符串:空终止字符数组工作原理
字符串实为以空字符 '\0' 结尾的一维字符数组。因此空终止字符串包含组成字符串的字符,后跟一个空字符。
下面声明初始化创建包含 "Hello" 的字符串。为在数组末尾容纳空字符,字符数组大小比单词 "Hello" 字符数多 1。
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
遵循数组初始化规则可写作:
char greeting[] = "Hello";
上述字符串在 C/C++ 中的内存表示:

实际上不必在字符串常量末尾手动放置空字符。C 编译器初始化数组时自动在末尾添加 '\0'。尝试打印上述字符串:
Live Demo
#include <stdio.h> int main () { char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; printf("Greeting message: %s\n", greeting ); return 0; }
编译执行输出:
Greeting message: Hello
C 支持广泛操作空终止字符串的函数:
| 序号 | 函数及用途 |
|---|---|
| 1 | strcpy(s1, s2); 复制字符串 s2 到 s1。 |
| 2 | strcat(s1, s2); 将字符串 s2 连接到 s1 末尾。 |
| 3 | strlen(s1); 返回字符串 s1 长度。 |
| 4 | strcmp(s1, s2); s1==s2 返回 0;s1<s2 返回负值;s1>s2 返回正值。 |
| 5 | strchr(s1, ch); 返回字符 ch 在字符串 s1 中首次出现的指针。 |
| 6 | strstr(s1, s2); 返回字符串 s2 在 s1 中首次出现的指针。 |
下例使用上述部分函数:
Live Demo
#include <stdio.h> #include <string.h> int main () { char str1[12] = "Hello"; char str2[12] = "World"; char str3[12]; int len ; /* copy str1 into str3 */ strcpy(str3, str1); printf("strcpy( str3, str1) : %s\n", str3 ); /* concatenates str1 and str2 */ strcat( str1, str2); printf("strcat( str1, str2): %s\n", str1 ); /* total lenghth of str1 after concatenation */ len = strlen(str1); printf("strlen(str1) : %d\n", len ); return 0; }
编译执行输出:
strcpy( str3, str1) : Hello strcat( str1, str2): HelloWorld strlen(str1) : 10
C语言
- 掌握 C# 字符串:基础、操作与进阶技巧完全指南
- C++ 字符串函数实战:strcpy、strcat、strlen、strcmp 详解与示例
- C 语言字符串完全指南:声明、输入输出与库函数详解
- VHDL 字符串列表创建:最佳实践与示例
- Python 字符串操作完全指南:替换、连接、分割、反转、大小写转换
- Python str.count() 完全指南:统计字符与子串出现次数实战
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式
- Java String.charAt() 详解:语法、返回类型、异常与实战示例
- 精通 Java String.endsWith():检查字符串后缀(示例)
- Java Strings 类:掌握字符串创建与操作
- Java 8 概览:函数式编程、流式 API 与日期时间新特性