C语言字符串完全指南:声明、初始化与输入输出
C语言字符串完全指南
本教程带你掌握C字符串基础:声明、初始化、输入输出、函数用法、指针操作及核心库函数。
在C中,字符串是以空字节 \0 结尾的字符数组。例如:
char c[] = "c string";
编译器自动为字符串字面量追加 \0,使其成为合法C字符串。

如何声明字符串?
字符串声明为字符数组。例如:
char s[5];

声明可容纳 4 字符加终止符 \0 的缓冲区。
如何初始化字符串?
多种初始化方式:
char c[] = "abcd";
char c[50] = "abcd";
char c[] = {'a', 'b', 'c', 'd', '\0'};
char c[5] = {'a', 'b', 'c', 'd', '\0'};

警惕缓冲区溢出:char c[5] = "abcde"; 试图在 5 字节数组存 6 字符(含 \0),应避免。
给字符串赋值
数组声明后不可直接赋值,须用 strcpy():
char c[100];
strcpy(c, "C programming");
注意: 直接赋值 c = "C programming"; 会导致编译错误。
从用户读取字符串
用 scanf() 读取空格分隔的输入:
#include <stdio.h>
int main() {
char name[20];
printf("输入姓名: ");
scanf("%s", name);
printf("你的姓名是 %s.", name);
return 0;
}
输出
输入姓名: Dennis Ritchie 你的姓名是 Dennis.
仅捕获首个单词,因 scanf() 遇空白停止。数组名退化为指针,故直接传 name。
如何读取整行?
使用 fgets() 和 puts():
#include <stdio.h>
int main() {
char name[30];
printf("输入姓名: ");
fgets(name, sizeof(name), stdin);
printf("姓名: ");
puts(name);
return 0;
}
输出
输入姓名: Tom Hanks 姓名: Tom Hanks
fgets() 读取最多 sizeof(name)-1 字符(含空格),保留末尾换行,puts() 会打印它。
注意: gets() 已废弃并从C标准移除,因其可导致缓冲区溢出。
传递字符串给函数
字符串像数组一样传递给函数。示例:
#include <stdio.h>
void displayString(char str[]);
int main() {
char str[50];
printf("输入字符串: ");
fgets(str, sizeof(str), stdin);
displayString(str);
return 0;
}
void displayString(char str[]) {
printf("字符串输出: ");
puts(str);
}
字符串与指针
字符串名退化为指针,支持指针算术:
#include <stdio.h>
int main(void) {
char name[] = "Harry Potter";
printf("%c", *name); // H
printf("%c", *(name+1)); // a
printf("%c", *(name+7)); // o
char *namePtr = name;
printf("%c", *namePtr); // H
printf("%c", *(namePtr+1)); // a
printf("%c", *(namePtr+7)); // o
}
常用字符串函数
- strlen() – 返回字符串长度(不含终止符)。
- strcpy() – 复制字符串。
- strcmp() – 字典序比较两字符串。
- strcat() – 拼接两字符串。
C语言
- 掌握 C# 字符串:基础、操作与进阶技巧完全指南
- 掌握 C# 命名空间:代码组织、作用域与最佳实践
- C++数组传递给函数实战指南
- C 语言运算符完全指南:算术、关系、逻辑、位运算等
- C 语言用户自定义函数四大模式对比:参数与返回值的设计权衡
- C++ 字符串函数实战:strcpy、strcat、strlen、strcmp 详解与示例
- C 语言字符串完全指南:声明、输入输出与库函数详解
- C 语言编程入门:全面教程指南
- Python 字符串操作完全指南:替换、连接、分割、反转、大小写转换
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式
- Java Strings 类:掌握字符串创建与操作