字符数组问C++

hal*_*i0n 1 c++ arrays char

以下两个片段之间有什么区别吗?一个是char数组,而另一个是字符数组指针,但它们的行为相同,不是吗?

例1:

char * transport_layer_header;
// Memory allocation for char * - allocate memory for a 2 character string
char * transport_layer_header = (char *)malloc(2 * sizeof(char));
sprintf(transport_layer_header,"%d%d",1,2);
Run Code Online (Sandbox Code Playgroud)

例2:

char transport_layer_header[2];
sprintf(transport_layer_header,"%d%d",1,2);
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 11

是,有一点不同.在第一个示例中,您在堆上动态分配两元素char数组.在第二个示例中,堆栈上有一个本地双元素char数组.

在第一个示例中,由于您没有free返回指针malloc,因此也存在内存泄漏.

它们通常可以以相同的方式使用,例如sprintf在演示时使用,但它们在根本上是不同的.


Moi*_*vin 5

另一个区别是你的第一个例子会破坏堆上的数据,而第二个例子会破坏堆栈上的数据.没有为尾随\ 0分配空间.