本帖最后由 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>