C语言scanf读取中文时一些注意事项
下面程序所运行的命令行界面的编码是GBK (代码页: 936 简体中文 GBK ) char s[10]; scanf("%s",s); // 输入“你好啊”,然后回车 printf("%s",s); // 能正确输出“你好啊” 使用调试工具查看 s 所在的内存空间: c4 e3 ba c3 b0 a1 00 00 00 00 百度查询可知 “你好啊”的 GBK 的编码是: 你: C4E3 好: BAC3 啊: B0A1 发现和数组 s 的前 6 个字节存储的值一样,由此可知,程序所运行的命令提示符支持哪种编码,那么 C 可以正确存储和输出这种编码的字符。 char ch; scanf("%c",&ch); // 输入“你”,然后回车 使用调试器查看变量 ch 所在的内存空间: c4 scanf 的 %c 表示读取一个字符,更确切的说是读取输入缓冲区的一个字节。 int ch; scanf("%c",&ch); // 输入“你”,然后回车 使用调试器查看变量 ch 所在的内存空间: c4 00 00 00 虽然 int 占 4 个字节,但是 scanf 的 %c 只读取一个字符(字节),所以把读取的 0xc4 赋值给整型变量 ch , ch 的值就是 0xc4 ,而内存是小端表示,便是 c4 00 00 00 同时,上面的 scanf 会出现编译时警告: warning: