C语言scanf读取中文时一些注意事项

不问归期 提交于 2020-02-06 19:52:02

下面程序所运行的命令行界面的编码是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

虽然int4个字节,但是scanf%c只读取一个字符(字节),所以把读取的0xc4赋值给整型变量chch的值就是0xc4,而内存是小端表示,便是c4 00 00 00

同时,上面的scanf会出现编译时警告:warning: format '%c' expects argument of type 'char *', but argument 2 has type 'int *' [-Wformat=]

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!