
这跟编码有关。
首先,我用VS2017(Win10 x64)编译运行了这个程序:
输出结果是2:
我又用 Ubuntu 17.10 x64 中的 g++ 编译运行同样的程序,输出结果为3:
难道这和操作系统有关?我看了一下代码页,发现二者采用的代码页不一样。
为了验证此问题,我把那个源代码文件用GBK重新保存,终端中的编码设置勾选上GBK,再次编译运行:
2出来了!
这是因为,在UTF-8中,为了节约空间,也为了兼容ASCII编码系统,将Unicode中原本用2个字节表示的字符表示成1~4个字节(具体转换规则在这里不赘述了),其中大多数汉字部分(比如“汉”)在UTF-8中为3字节,但是在中国大陆地区,GBK编码依然很常用,在GBK中,除ASCII字符外,都是一个字符占两个字节。所以,一个汉字占多少字节还是具体取决于编码。
