一 缓冲区,C中有很多字符a. 可显字符 b.控制字符
- 在 C 语言 中,字符可以分为 可显字符(Printable Characters) 和 控制字符(Control Characters) ,它们通常存储在 缓冲区(Buffer) 中(如输入/输出缓冲区)。以下是详细的分类和说明:
1. 缓冲区(Buffer)
-
定义:临时存储数据的内存区域(如键盘输入、文件读取时的中间存储)。
-
常见场景:
-
输入缓冲区 :
scanf()
、getchar()
读取数据时暂存。 -
输出缓冲区 :
printf()
写入数据时暂存(直到遇到\n
或手动刷新)。
-
-
示例:
cppchar buffer[100]; fgets(buffer, sizeof(buffer), stdin); // 从输入流读取一行到缓冲区
2. 字符分类
(a) 可显字符(Printable Characters)
-
定义:能在终端/屏幕上显示出来的字符。
-
范围:
-
ASCII 32~126:包括字母、数字、标点符号等。
-
例如:
A
,z
,3
,!
, (空格)。
-
-
判断函数:
cpp#include <ctype.h> int isprint(int c); // 若为可显字符,返回非零值
(b) 控制字符(Control Characters)
-
定义:用于控制设备(如终端、打印机)的特殊字符,不可直接显示。
-
范围:
-
ASCII 0~31 及 127 (如
\n
,\t
,\b
)。 -
例如:
\a
(响铃)、\r
(回车)、\0
(字符串结束符)。
-
-
判断函数:
cpp#include <ctype.h> int iscntrl(int c); // 若为控制字符,返回非零值
3. 常见控制字符示例
字符 | ASCII 值 | 作用 |
---|---|---|
\n |
10 | 换行(Newline) |
\r |
13 | 回车(Carriage Return) |
\t |
9 | 水平制表符(Tab) |
\b |
8 | 退格(Backspace) |
\0 |
0 | 字符串终止符(Null) |
\a |
7 | 响铃(Alert) |
4. 代码示例:检测字符类型
cpp
#include <stdio.h>
#include <ctype.h>
int main() {
char c = '\t'; // 控制字符示例
if (isprint(c)) {
printf("'%c' 是可显字符\n", c);
} else if (iscntrl(c)) {
printf("'\\t' 是控制字符\n"); // 注意:控制字符可能无法直接打印
}
return 0;
}
输出:
'\t' 是控制字符
5. 特殊问题:\r
和 \n
的区别
字符 | 说明 |
---|---|
\r |
回车(Carriage Return),将光标移动到行首(Linux/Windows 换行需配合 \n )。 |
\n |
换行(Newline),将光标移动到下一行(Unix/Linux 的换行符)。 |
不同系统的换行符:
-
Windows :
\r\n
(回车+换行)。 -
Unix/Linux :
\n
(仅换行)。 -
Mac(旧版) :
\r
(仅回车)。
6. 缓冲区的刷新(Flush)
-
行缓冲(Line Buffering) :遇到
\n
时刷新缓冲区(如终端输出)。cppprintf("Hello\n"); // 立即输出(因为有 \n)
-
全缓冲(Full Buffering):缓冲区满时刷新(如文件写入)。
-
无缓冲(Unbuffered) :立即输出(如
stderr
)。 -
手动刷新:
cppfflush(stdout); // 强制刷新输出缓冲区
7. 应用场景
-
输入处理 :过滤控制字符(如读取密码时忽略
\b
)。 -
文件操作:处理不同系统的换行符(Windows vs Linux)。
-
终端控制 :使用
\r
实现进度条(覆盖当前行)。
总结
概念 | 说明 |
---|---|
缓冲区 | 临时存储数据的内存区域,减少直接 I/O 操作。 |
可显字符 | 可打印的字符(字母、数字、符号),isprint() 检测。 |
控制字符 | 控制设备行为的特殊字符(如 \n 、\t ),iscntrl() 检测。 |
\r vs \n |
回车 vs 换行,不同系统处理方式不同。 |
缓冲区刷新 | \n 、fflush() 或缓冲区满时触发。 |
二 提交到远程仓库gitee
Gitee(码云)是国内常用的 Git 托管平台,类似于 GitHub。以下是完整的 命令行操作流程,涵盖从本地仓库创建到推送到 Gitee 的步骤。
前提条件
-
已安装 Git
bashgit --version # 检查是否安装
如果未安装,在 Ubuntu 上运行:
bashsudo apt update && sudo apt install git
完整操作流程
- 访问 Gitee 官网 注册账号。
- 在 Gitee 上 创建一个新仓库

- 配置 Git 全局信息(如果未设置)
bash
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
- 新建个目录,把远端仓库的所有内容都克隆过来
bash
mkdir test_git
cd test_git/
git clone https://gitee.com/drayz/test.git
ls
test #显示
- 如果不小心删了也没啥,本地仓库不影响远端
- 克隆过来的远端仓库本质上就是个.get文件
bash
ls -a
#显示
.git/
.gitignore
LICENSE
README.en.md
README.md
- tree命令.git可以看到仓库的一些信息
bash
tree .get
#显示
└── refs
├── heads
│ └── master #单分支
├── remotes
│ └── origin #remotes指向origin,说明本地仓库和远端关联
│ └── HEAD
└── tags #标签
- 现在写一个hello.c文件,现在次文件还没有被仓库所管理,git add . 添加当前目录所有没有被添加的文件到仓库
bash
vim hello.c
ls #显示:hello.c LICENSE README.en.md README.md
git add .
- commit提交(把文件提交到本地git)
bash
git commit -m "测试"
#显示
[master fad1311] 测试
1 file changed, 8 insertions(+)
create mode 100644 hello.c
- push推送到远端,和本地仓库保持一致
bash
git push
Username for 'https://gitee.com': drayz #你的gitee用户名
Password for 'https://[email protected]': #密码
#显示
remote: [session-c443ab8f] drayz: Incorrect username or password (access token)
fatal: Authentication failed for 'https://gitee.com/drayz/test.git/'
cyx@VM-0-9-ubuntu:~/test/test$ git push
Username for 'https://gitee.com': drayz
Password for 'https://[email protected]':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 350 bytes | 350.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 254fb1b9
To https://gitee.com/drayz/test.git
8b2f2f0..fad1311 master -> master
其他操作
- 查看日志
bash
git log
- 查看当前仓库状态
bash
git status