本帖最后由 jackz007 于 2024-10-27 17:13 编辑
应该指出,图片中的 str[3] = 0 并不是 "中" 字占用的第 4 个字节,楼主应该明白,C 语言的每一个字符串在末尾都有一个字符串结束标志 '\0',这个 str[3] 正是这个结束标志,也就是说,一个 3 个字符的字符串实际占用 4 个字节,每个字符串所占用的字节数量都是 n + 1。
先明确 2 点:
1、西文字符每个字符占用 1 个字节,其 ASCII 编码范围为 0 ~ 127,属于正值;
2、汉字占用的字节数取决于操作系统,在 Windows 系统中,汉字采用 GBK 编码,每个汉字占用 2 个字节,每个字节的都是负值;在 Linux 系统中,汉字采用 UTF-8 编码,每个汉字占用 3 个字节,每个字节都是负值;
由此可见,同一个程序在不同的操作系统上运行是必须要修改代码的。
【Windows】:#include<stdio.h>
int main(void)
{
char str[] = "fishC * 中国 * China" , * p ;
int length ;
for(length = 0 , p = str ; * p ; length ++) {
if(* p > 0) p ++ ;
else p += 2 ; // Windows
}
printf("%s\n" , str) ;
printf("%d\n" , length) ;
}
【Linux】#include<stdio.h>
int main(void)
{
char str[] = "fishC * 中国 * China" , * p ;
int length ;
for(length = 0 , p = str ; * p ; length ++) {
if(* p > 0) p ++ ;
else p += 3 ; // Linux
}
printf("%s\n" , str) ;
printf("%d\n" , length) ;
}
编译、运行实况:D:\[exercise]\C>g++ -o x x.c
D:\[exercise]\C>x
fishC * 中国 * China
18
D:\[exercise]\C>
|