一、基本概念
字符串是位于双引号中的字符序列
char s[] = "...";C语言中没有原生字符串类型,本质上是以空字符"\0"结尾的字符数组
在内存中以"\0"结束,所占字节比实际多一个 例如字符串"HELLO"在内存中的存储方式:
| H | E | L | L | O | \0 |
二、字符串的初始化
法1:字符串字面量
简单来说就是直接写在代码里、用双引号包起来的固定文本
char name[10] = "Hello"; // 或者让编译器自动计算长度: char greeting[] = "Hello";法2:逐个字符赋值
char name[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
三、内存模型
以 char str[6] = "Hello"; 为例,它在内存中的样子是这样的:
| 数组下标 | str[0] | str[1] | str[2] | str[3] | str[4] | str[5] |
|---|---|---|---|---|---|---|
| 存储内容 | H | e | l | l | o | \0 |
| ASCII码 | 72 | 101 | 108 | 108 | 111 | 0 |
四、常用操作与坑点
输入与输出 使用
%s格式化占位符输出char msg[20]; printf("请输入你的名字: "); scanf("%s", msg); // msg 本身就是地址,不需要加 & printf("你好, %s!\n", msg);修改数组中的单个字符 通过下标直接访问
char str[] = "Hello"; str[0] = 'h'; // 把 'H' 改成 'h' printf("%s", str); // 输出 "hello"常见误区:不能直接用
=赋值char str[10]; str = "Hello"; // 错误,编译会报错正确做法:使用
string.h库中的strcpy函数#include <string.h> strcpy(str, "Hello");字符串处理常用库函数
<string.h>处理 C 语言字符数组时,通常会引入<string.h>头文件:函数 功能 示例 strlen(str)计算字符串真实长度(不含 ‘\0’) strlen("Hello") 结果为 5strcpy(dest, src)把 src 复制到 dest strcpy(a, b);strcat(dest, src)把 src 拼接在 dest 后面 strcat(a, b);strcmp(str1, str2)比较两个字符串(相同返回 0) strcmp(a, b) == 0