执行strcpy时char []和char *之间的区别
difference between char [] and char* when doing strcpy
我有下面的代码,请问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;
}
除了 str2
是一个指针而 str3
是一个数组这一事实(指针使用起来有点棘手,因为你可能会忘记删除它等),还有是另一个问题:分配给 str2
的内存是免费的 space,通过 operator new
。这是一个缓慢的操作。相比之下,str3
具有自动存储持续时间,并且大多数时候它的内存是在堆栈上分配的,这要快得多。因此,在性能关键代码中,这可能会有所作为。
我有下面的代码,请问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;
}
除了 str2
是一个指针而 str3
是一个数组这一事实(指针使用起来有点棘手,因为你可能会忘记删除它等),还有是另一个问题:分配给 str2
的内存是免费的 space,通过 operator new
。这是一个缓慢的操作。相比之下,str3
具有自动存储持续时间,并且大多数时候它的内存是在堆栈上分配的,这要快得多。因此,在性能关键代码中,这可能会有所作为。