C语言关于中文字符串的使用误区

C语言关于中文字符串的使用误区

背景

前几天在写c语言代码进行文件读写的时候,在处理文件中的中文诗句的过程中发现了c语言txt文本文件的中文读取到char数组中的一些不同寻常之处,因此做一个总结。

c语言汉字的存储方式和特点

以下是一段c语言代码,比较中文存储和英文字符存储可以清晰看到c语言中,中文占2个字节,英文字母占1个字节
在这里插入图片描述
在文件读取的时候,utf-8ANSI编码的中文读入到字符串的结果是不一样的。

UTF-8
在这里插入图片描述
ANSI
在这里插入图片描述
因此utf-8和ansi以及unicode对于中文汉子的编码方式是一样的,众所周知英文字母都是Ascall编码,但是上面三种是不一样的。

Unicode是一种国际通用编码,可以包含世界上所有的符号,但是,对于存储带来一些问题,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储,正如若每一个字符都占据4个字节,对于英文字母而言就造成了极大的浪费。

utf-8编码方式是一种使用最广泛的unicode编码的实现方式,UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

一下是更具体的知识去讲解编码
编码知识

一般c语言处理汉字时候要留意txt中文件的保存类型,博主一般是保存为ansi,占据两个字节,因此读出文件的字符需要进行分割是也是按照两位两位的方式去分割,而且当使用中文字符进行匹配的时候需要使用strcmp函数去做,因为中文占据两个字节,英文占据一个可以直接==去判断。

以下是自己分割古诗的一个实例
在这里插入图片描述
使用char one[3]数组去保存每次生成的一个汉字,赋值到新的数组里面,然后进行strcmp匹配中文标点进行分割古诗。
以上是我写代码过程的一些经验,欢迎各位留言指导。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宝..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值