好像有个wchar_t类型的,这里不深究了,只研究char型(1个字符大小)的

1.定义

直接使用char,但每个汉字占据2个字符,所以必须以字符串形式存在

char s[10];

2.定义时直接赋值

和基本类型相同,如 char s[10]="汉字"

3.输出

整个字符串输出

printf("%s",s);

cout<<s<<endl;

单个汉字字符输出

这里有点考究了

如果printf("%c",s[0]); 会输出一个问号

合适的方法应该是printf("%c%c",s[0][1]);

4.输入

整个字符串的输入

和之前一样使用 scanf("%s",s); cin>>s;

单个汉字字符的输入

这里的输入和以往的不同.

如果是scanf("%c",s[0]);  结果字符串相应的那个汉字会变成一个奇怪的其他字符,而不是自己输入那个字符

合适的方法应该是输入 scanf("%c%c",s[0],s[1]);

5.原因与分析

为什么会有这样的差别。自己推测原因如下(由于时间不充足就不做严格的证明了)

汉字的编码区中,存储单元上两个字节都是负数。所以系统在输出汉字字符串的时候先检测这个字节是否负数,如果是负数则要连同下一个字节,并合成一个有两字节长度的字符来输出,由此产生出了我们的汉字。那么输入的时候,则把用户输入的汉字,拆分为两个字符,然后分别放在参数列表指定的位置上,即例如到了 scanf("%c%c",s[0],s[1]);这个命令的时候,用户输入了一个“汉”字,然后“汉”拆分成了两个字符,第一个是“汉”的高八位,第二个是“汉”的低八位,然后分别放进了s[0]和s[1]中.

6.在代码中修改单个汉字

s[0]="中" 这种方法是显然行不通的,而对字符串又不能使用位移操作符来获取高八位低八位

最纠结的问题,搜寻许久无果,然后产生了原因分析,根据原因找到了改进的方法

使用strncpy()函数,头文件包含在string.h

例如要修改s中第一个字符

strncpy(s,"中",2); 这样就成功了

可以写一个宏定义函数

#define Chcpy(s,pos,t)  strncpy(s+pos,t,strlen(t))

s是被替换的字符串,pos是替换的起始位置,t是替换字符串

最新文章

  1. C# Redis Server分布式缓存编程 --网络转载
  2. Android发送短信
  3. linux 的 samba 实现共享文件夹
  4. Java概述之从源码到运行
  5. 分巧克力【来源:CSDN线上编程挑战赛】——递归,费波那奇数列,迭代
  6. spark-shell启动集群
  7. Nginx修改配置实现图片防盗链
  8. C#剪贴板对文件的复制、粘贴操作
  9. Codevs2776 寻找代表元
  10. UIDebuggingInformationOverlay在OC语法中使用
  11. python3实现TCP协议的简单服务器和客户端
  12. Dynamics CRM 不同的站点地图下设置默认不同的仪表板
  13. MongoDB学习笔记(三)
  14. Redux中间件组合方法
  15. 模拟post/get请求 类似于google的postman
  16. spring-AOP(面向切面编程)-注解方式配置
  17. weblogic系列漏洞整理 -- 3. weblogic 后台提权
  18. 使用skipper 扩展fabio 的路由&amp;&amp;http proxy 功能
  19. 深入理解CSS3 gradient斜向线性渐变——张鑫旭
  20. linux/Centos下查看和修改网卡Mac地址(ifconfig命令)

热门文章

  1. 4276: [ONTAK2015]Bajtman i Okrągły Robin
  2. LRM-00109: could not open parameter file
  3. 微信小程序设计指南
  4. Webpack探索【8】--- 模块热替换详解
  5. 扫盲--.net 程序集
  6. Bootstrap——组件
  7. hashMap的线程不安全
  8. Warning: Cannot send session cookie – headers already sent…
  9. Html+CSS3技术实现动画、天气图标动态效果 效果很酷
  10. linkedhashSet和hashSet和TreeSet的区别(转)