C 语言字符串完全指南:声明、输入输出与库函数详解
什么是 C 语言字符串?
C 语言中 字符串 是以空字符(\0)结尾的字符连续序列。虽然语言无专门字符串类型,但通常用 char 数组表示。用字符串字面量初始化时,编译器自动追加空终止符。
"Welcome to the world of programming!"
标准库头文件 <string.h> 提供丰富的字符串操作函数。
声明与初始化字符串
因字符串本质是字符数组,声明时须指定数组大小。大小定义可存储的最大字符数(不含空终止符)。
char string_variable_name[array_size];
典型声明:
char first_name[15]; /* 最多 14 字符 + \0 */ char last_name[15];
提供初始化值时,编译器自动计算长度并添加空终止符,数组大小可省略。
char first_name[15] = "ANTHONY";
char first_name[] = "NATHAN"; /* 自动推断大小 */
char string3[6] = {'h','e','l','l','o','\0'}; /* 显式终止符 */
从用户读取字符串
输入函数在安全性与行为上有差异:
scanf("%s", name)读至空白符,但易造成缓冲区溢出gets()读整行,不安全且 C11 已移除fgets(name, size, stdin)最多读size-1字符,预留空终止符位置
使用 fgets 示例:
#include <stdio.h>
int main() {
char name[50];
printf("Enter your full name: ");
fgets(name, sizeof(name), stdin);
printf("Your name is %s", name);
return 0;
}
打印字符串
经典方式 printf("%s", name);。两个便捷替代方案:
fputs(name, stdout)– 直接写入输出流puts(name)– 输出字符串并自动换行
puts 示例:
#include <stdio.h>
int main() {
char greeting[] = "Hello, world!";
puts(greeting);
return 0;
}
字符串库(<string.h>)
常用函数:
| 函数 | 说明 |
|---|---|
| strlen | 返回字符串长度(不含空终止符) |
| strcat | 追加字符串到另一字符串末尾 |
| strcmp | 按字典序比较两字符串 |
| strcpy | 复制字符串 |
| strncmp | 比较前 n 字符 |
| strncpy | 复制前 n 字符 |
| strchr | 查找字符首次出现位置 |
| strrchr | 查找字符最后出现位置 |
| strstr | 查找子串 |
| strncat | 追加前 n 字符 |
| strlwr | 转小写(非标准) |
| strupr | 转大写(非标准) |
| strrev | 反转字符串(非标准) |
演示程序:
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "Hello";
char str2[20] = " World!";
char result[40];
/* 比较 */
if (strcmp(str1, str2) == 0) puts("Strings are equal");
else puts("Strings are not equal");
/* 拼接 */
strcat(str1, str2); // str1 变为 "Hello World!"
printf("Concatenated: %s\n", str1);
/* 长度 */
printf("Length of str1: %zu\n", strlen(str1));
/* 复制 */
strcpy(result, str1);
printf("Copied string: %s\n", result);
return 0;
}
字符串转数字
标准转换函数:
atoi– 转intatof– 转doubleatol– 转long
atoi 示例:
#include <stdio.h>
#include <stdlib.h>
int main() {
char number_str[20];
printf("Enter a number: ");
fgets(number_str, sizeof(number_str), stdin);
int num = atoi(number_str);
printf("You entered %d\n", num);
return 0;
}
核心要点
- 字符串是以 \0 结尾的
char数组 - 使用前须声明数组大小,或初始化时让编译器推断
- 输入用
fgets保安全;避免gets及无边界检查的scanf("%s") - 善用
<string.h>进行健壮字符串操作 - 数字字符串转换用
atoi/atof/atol避免运行时错误 - 字符串字面量为只读,修改会导致未定义行为
C语言
- C++ 数组完全指南:声明、初始化、多维数组与指针技巧
- C++ 字符串函数实战:strcpy、strcat、strlen、strcmp 详解与示例
- C 语言 realloc() 完全指南:语法、最佳实践与实战案例
- C 语言 free() 函数实战指南:正确释放动态内存、防泄漏与避坑全解析
- C# 字符串完全指南:创建、属性、常用方法与实战技巧
- VHDL 字符串列表创建:最佳实践与示例
- Python 字符串操作完全指南:替换、连接、分割、反转、大小写转换
- Python 字符串完全指南:创建、访问、格式化与内置方法大全
- 精通 Java 字符串:创建、方法与最佳实践
- 精通 Java 枚举字符串表示:默认行为、toString 重写与进阶模式
- Java String length() 方法:获取字符串长度(示例)
- Java Strings 类:掌握字符串创建与操作