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

时间:2015-11-12 02:59:34

标签: c++ 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;
}

1 个答案:

答案 0 :(得分:3)

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