zoukankan      html  css  js  c++  java
  • 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

    虽然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=]

  • 相关阅读:
    后海日记(6)
    后海日记(6)
    后海日记(5)
    后海日记(5)
    TCP 连接的握手信息详解
    TCP 连接的握手信息详解
    java枚举类型的优势在哪里?--一个实例
    java枚举类型的优势在哪里?--一个实例
    网络基础之网络协议篇
    mysql之innodb引擎的共享表空间和独立表空间
  • 原文地址:https://www.cnblogs.com/ryzz/p/12269979.html
Copyright © 2011-2022 走看看