关于字符串占用字节大小问题

img

img

img


网上说汉字占用两个字节大小,那为什么我第一副图提示错误呢,如果说是因为字符数组元素大小是一个字节无法保存两个字节的元素那为什么第三幅图又可以呢

UTF-8是一种变长字符编码。对于ASCII字符,仍然采用一个字节表示,但对于其他Unicode字符和汉字,则采用两个、三个甚至四个字节表示。

定义字符串数组时,如果你不确定字符串大小,在初始化时可以忽略数组大小,编译器会自动帮你计算

char a[] = "我爱你";

另外当字符串里含有汉字时,strlen()函数返回的仍然是字符串的大小,而不是汉字的个数。

参考
https://en.wikipedia.org/wiki/UTF-8

你可以不用规定字节大小啊,而且UTF-8下汉字是三字节,GBK下汉字也确实是两个字节,不过不用管的。

char *self  = "咸鱼";

这个根据计算机底层的设计有关,一般gbk占用两个字节,utf-8占用三个字节,汉字是经过计算机底层的语言处理系统进行管理,跟其规定的机内码,字形码,输出码等有关,一般字符串最好用指针指向比较好.