C++关于字符指针的问题

字符指针的指针名输出为字符串,为什么输出结尾总是带了一些特殊字符呢?

char *buffer = new char[3];
    buffer[0] = '1';
    buffer[1] = '2';
    buffer[2] = '3';
    cout << buffer;

输出如下:

图片说明

字符串必须拥有结束符,'\0',否则将会一直输出直到出现'\0',你输出了buffer[3]及以后的内容
你给字符串赋值的方法太笨拙了,以下代码可能比较适合你

char *buffer = new char[3];
strcpy(buffer, "123");
cout << buffer;
char *buffer = new char[4];
    buffer[0] = '1';
    buffer[1] = '2';
    buffer[2] = '3';
        buffer[2] = 0;
    cout << buffer;

楼上的代码可能运行起来看不到什么问题,但是严格来说,存在缓冲区溢出,因为buffer只有3,strcpy拷贝是越界的。