wyxnogiveup 发表于 2022-11-30 22:05:41

带你学C带你飞第22节课后作业实操题第0题

这是一道用指针实现strlen函数并能计算中文字符的题。
“不难发现,每个中文字符在我们的系统中是占用 4 个字节的存储空间,并且都是负数。以此规律,我们只要检测一个字符对应的整型值是否为负数,如果是(中文字符),则将指针往后移动两个字节。”这是小甲鱼的描述。
大佬们好,我想请问为什么是指针往后移动两个字节啊?一个中文字符占四个字节,那不是应该移动四个字节吗?

jackz007 发表于 2022-11-30 22:14:02

本帖最后由 jackz007 于 2022-11-30 22:15 编辑

      目前常见的中文版 Windows 和 Linux 采用的中文编码是有区别的。Windows 采用 "GBK" 编码,每个汉字占用 2 个字节,Linux 系统采用 "UTF-8" 编码,每个汉字占用 3 个字节。小甲鱼用来举例的代码是在 Linux 系统下,先按西文字符对待,指针步进一个字符,当发现这个字符的值是负数的时候,说明当前应该是中文字符,于是,再补充步进 2 个字符,这样,每个汉字字符总共会步进 3 个字符;如果是在 Windows 系统下,这个代码需要进行修改,要把补充步进 2 个字符改成 1 个。

wyxnogiveup 发表于 2022-11-30 22:36:07

jackz007 发表于 2022-11-30 22:14
目前常见的中文版 Windows 和 Linux 采用的中文编码是有区别的。Windows 采用 "GBK" 编码,每个汉 ...

好的,明白了,太谢谢大佬了!
页: [1]
查看完整版本: 带你学C带你飞第22节课后作业实操题第0题