strcpy越界拷贝问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/zhao3132453/article/details/89023491