版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhao3132453/article/details/89023491
面试中遇到的一个问题,这里简单总结一下(仅供参考~)
1、示例1
int main()
{
const char *str = "123";
char str1[3];
strcpy( str1, str );
printf( "%s", str1 );
system("pause");
return 0;
}
运行结果:(VS2017)
可以正确显示输出123,但是退出就崩溃
因为退出时栈被破坏了
2、示例2
int main()
{
const char *str = "123";
char *str1 = new char[3];
strcpy( str1, str );
printf( "%s", str1 );
delete str1;
str1 = nullptr;
system("pause");
return 0;
}
运行结果同上
3、示例3
int main()
{
const char *str = "123";
char *str1 = new char[3];
strcpy( str1, str );
printf( "%s", str1 );
system("pause");
return 0;
}
虽然结果显示正常,退出也正常,但是内存泄漏
4、示例4(正确用法)
int main()
{
const char *str = "123";
int nLen = strlen( str ) + 1;
char *str1 = new char[nLen];
strcpy( str1, str );
printf( "%s", str1 );
delete str1;
str1 = nullptr;
system( "pause" );
return 0;
}
总结:
1、strcpy使用时需要注意边界检查,或者使用strncpy