char a[] = "东,西";
char* s = a;
for (int i = 0; i < strlen(a); i++) {
printf("%c",*(a + i));
}
打印输出如下:
改一下,加个回车:
char a[] = "东,西";
char* s = a;
for (int i = 0; i < strlen(a); i++) {
printf("%c\n",*(a + i));
}
输出结果为:
如果不是\n,加一个空格:
char a[] = "东,西";
char* s = a;
for (int i = 0; i < strlen(a); i++) {
printf("%c ",*(a + i));
}
输出如下:
总之,如果中文字符数组,如果不是紧连着输出,中间有隔断,就会出现乱码。因为中文占了不止一个字节。
然后我想知道for循环中i的值变化过程,所以又添加了一行:
char a[] = "东,西";
char* s = a;
for (int i = 0; i < strlen(a); i++) {
printf("i: %d", i);
printf("%c", *(a + i));
}
然后出现的结果是:
出现了更奇怪的乱码,这些乱码中有不同字节内容碰巧组成的中文字符
比如第一次循环i=0,“东”的第一个字节和i=1时输出的"i"组成了一个"秈"字。
所以,打印中文字符数组时,如果用for循环,中间不要插入任何语句,必须一个一个字节依次输出。至于循环了多少次,应该还是char,也就是字节个数。监视到i最大到5,也就是6.
strlen的值也是6