指向分配的6个字节的地址空间。然后通过while指到了分配的空间的末尾,这个时候打印就是一段乱码
嗯,主要是p在变,当你再printf时,p已经不再指向它一开始的内存空间了,我稍稍修改了一下,祝好!
#include<stdlib.h>
#include<string>
void main()
{
char a[6] = {"china"};
char *b = a;
char *p;
p = (char *)malloc(6);
memset(p, 0, 6);
//while (*p++ = *b++);
char *t = p;
while (*b != 0) *t++ = *b++;
printf("%s\n", p);
}
如果b结尾有\0,p还是指向p+6,但是用printf("%s\n", p);因为最后一个字符后面没有\0了,所以会一直输出乱码,直到遇到内存字节为0停止。
如果要输出china,只要最后的printf("%s\n", p-6);
因为是字符数组不是字符串所以末尾不会有“\0”,所以当你指向第6个的时候就是一个没有被初始化过的空间,然后就会一直输出乱码,直到遇到下一个终止符。。。