- 系统:windows 64
- 编译器:gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
- 文本编辑器:notepad
- 控制台:Cmder
- 编程语言:C、Python
首先,要想打印汉字,必须考虑到编码问题。在windows下,由于系统使用GBK编码,而GCC解析时使用UTF-8而会导致以下代码运行时出现乱码:
#include <stdio.h> int main() { char *str = "你好,世界!"; printf("%s ", str); return 0; }
解决方法为:使用“-fexec-charset=gbk”命令
解决了编码问题,我们还需要了解几点:
- char类型本质上是数字,占据一个字节(即八位),可以通过%d打印编码,通过%c打印字符
- 在C语言中,一个汉字占据两个char类型
- 汉字的两个char类型为负数
- 在打印汉字时,它的两个char必须紧跟着
根据这几点,我们可以打印出汉字以及它们的编码:
#include <stdio.h> #include <string.h> int main() { // str为字符指针,指向一个字符字面量,这个字符字面量由' '结尾 char *str = "你好,世界!Hello, world!"; // chr为字符指针,指向str所指向的字符字面量的第一个字符的地址,即'你'字符的两个char中的第一个 char *chr = str; printf("%zu %s ", strlen(str), str); // 如果遇到' ',说明字符串结束了 while (*chr != '