文章目录
- 1、字符串的定义与初始化
- [2. 核心特征:结束标志 \0](#2. 核心特征:结束标志 \0)
- [3. 常用字符串处理函数](#3. 常用字符串处理函数)
- [4. 字符串的输入与输出](#4. 字符串的输入与输出)
在C语言中,字符串(String) 实际上并不是一种独立的基本数据类型,而是由一系列 字符(char) 组成的 字符数组,并以空字符 \0 作为结束标志。
1、字符串的定义与初始化
在C语言中,有两种主要方式来定义字符串:
1.1、字符数组
这是最常见的定义方式。编译器会自动在末尾加上 \0。
bash
char str1[] = "Hello"; // 自动根据内容分配空间(6个字节)
char str2[10] = "Hello"; // 手动指定大小,剩余位自动补 \0
char str3[] = {'H', 'e', 'l', 'l', 'o', '\0'}; // 手动逐字符初始化
1.2、字符串常量(指针方式)
使用指针指向一个存放在只读数据区的字符串。
bash
char *str4 = "Hello";
注意:通过这种方式定义的字符串通常是只读的,修改它的内容可能会导致程序崩溃。
2. 核心特征:结束标志 \0
作用:C语言不记录字符串的长度,只靠 \0 来判断字符串在哪里结束。
内存占用:字符串 "Hi" 包含 2 个可见字符,但实际在内存中占用 3 个字节的空间('H', 'i', '\0')。
3. 常用字符串处理函数
C语言在标准库 <string.h> 中提供了一系列处理字符串的函数:
| 函数名 | 功能 | 说明 |
|---|---|---|
| strlen(s) | 返回字符串长度 | 不包含 末尾的 \0 |
| strcpy(s1, s2) | 复制字符串 | 将 s2 复制到 s1(注意 s1 空间需足够大) |
| strcat(s1, s2) | 拼接字符串 | 将 s2 接到 s1 的后面 |
| strcmp(s1, s2) | 比较字符串 | 相等返回 0,不等返回非 0(基于 ASCII 码) |
| strstr(s1, s2) | 查找子串 | 在 s1 中查找 s2 首次出现的位置 |
4. 字符串的输入与输出
(1) 输出
printf("%s", str); :最常用的格式化输出。
puts(str); :输出并在末尾自动添加换行符。
(2) 输入
scanf("%s", str); :不推荐。遇到空格、回车或制表符会停止读取,且容易溢出。
fgets(str, size, stdin); :推荐。可以指定读取长度,防止缓冲区溢出,且能读取空格。
bash
char name[20];
printf("请输入姓名: ");
fgets(name, sizeof(name), stdin); // 安全读取一行