我有以下代码,我想知道str2
和str3
的实现有什么区别,它们都给出相同的结果,哪一个更容易出错?
编辑:当我测试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;
}
答案 0 :(得分:3)
除了str2
是一个指针,而str3
是一个数组(并且指针使用起来有点棘手,因为你可能忘记删除它等),还有另一个问题:为str2
分配的内存位于可用空间,通过operator new
。这是一个缓慢的操作。相比之下,str3
具有自动存储持续时间,并且通常其内存在堆栈上分配,这要快得多。因此,在性能关键代码中,这可能会有所不同。