执行strcpy时char []和char *之间的区别

difference between char [] and char* when doing strcpy

我有下面的代码,请问str2str3的实现有什么不同,它们给出的结果是一样的,哪个更容易出错? 编辑:当我测试 str2 的表示时,我发现有一次我的代码崩溃了,因为 str2 是一个错误的指针!

/* strcpy example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str1[] = "Sample string";
  char str0[] = "Sample String and more";
  char* str2;
  str2 = new char[40];
  char str3[40];
  strcpy (str2,str1);
  strcpy (str3,str1);
  strcpy (str2,str0);// crash happened here str2 is bad pointer!!!
  printf ("str1: %s\nstr2: %s\nstr3: %s\n",str1,str2,str3);
  delete str2;
  return 0;
}

除了 str2 是一个指针而 str3 是一个数组这一事实(指针使用起来有点棘手,因为你可能会忘记删除它等),还有是另一个问题:分配给 str2 的内存是免费的 space,通过 operator new。这是一个缓慢的操作。相比之下,str3 具有自动存储持续时间,并且大多数时候它的内存是在堆栈上分配的,这要快得多。因此,在性能关键代码中,这可能会有所作为。