鱼C论坛

 找回密码
 立即注册
查看: 72|回复: 2

[已解决]带你学C带你飞第22节课后作业实操题第0题

[复制链接]
发表于 2022-11-30 22:05:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是一道用指针实现strlen函数并能计算中文字符的题。
“不难发现,每个中文字符在我们的系统中是占用 4 个字节的存储空间,并且都是负数。以此规律,我们只要检测一个字符对应的整型值是否为负数,如果是(中文字符),则将指针往后移动两个字节。”这是小甲鱼的描述。
大佬们好,我想请问为什么是指针往后移动两个字节啊?一个中文字符占四个字节,那不是应该移动四个字节吗?
最佳答案
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 个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 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 个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2022-11-30 22:36:07 | 显示全部楼层
jackz007 发表于 2022-11-30 22:14
目前常见的中文版 Windows 和 Linux 采用的中文编码是有区别的。Windows 采用 "GBK" 编码,每个汉 ...

好的,明白了,太谢谢大佬了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2023-1-29 17:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表