Moefish 2015-06-05 06:56 采纳率: 100%
浏览 2362
已采纳

关于C语言中的字符串输入输出

出于好奇测试了一下,声明的时候:
char ch[5];
scanf("%s",ch);
printf("%s,%d",ch,sizeof ch);

如果输入超过5个字母,字母都还是会全部显示出来的,而ch的大小还是5BYTE。这printf到底是什么黑科技?顺便问一下%s是怎么支持Unicode的?好像汉字啦,Ctrl+字符这一类奇奇怪怪的好像也都可以输出诶,怎么做到的?
好像getchar()也能正常识别汉字并储存的样子……

  • 写回答

3条回答

  • 知常曰明 2015-06-05 07:13
    关注

    1.关于超过5个字节的问题。你的这样做法,数组实际已经跨过界了。问题是会表现出来的。例如,你在这个ch[5]后面另外定义一个int,先给这个int赋好值,你会发现scanf之后那个int的值变了.如果后面是没有数据的话,有可能会引起段错误..
    2.有C/C++有tchar.h,可以完全支持unicode.根据你的控制台/终端的编码方式,ASCII0-31的控制字符,ASCII128-255的字符,也可能有对应的可显示字符的。甚至在一定情况下也可以把GBK的两半拼起来显示为一个汉字。但是如果存在编码转换,例如输入的时候是UTF-8,输出GBK就一定要处理过才行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?