请教,如图,当malloc分配6个字节时,指针p最后指向了什么?

![图片说明](https://img-ask.csdn.net/upload/201611/01/1477976048_822587.png)图片说明

指向分配的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个的时候就是一个没有被初始化过的空间,然后就会一直输出乱码,直到遇到下一个终止符。。。