gzrjzcx 2017-11-30 09:59 采纳率: 0%
浏览 804

关于复现strcpy中的问题

如题,在准备面试的时候发现好多网上复现strcpy时其代码会有如下一步:

 char* MyStrcpy(char *pDst, const char* pSrc)
{
    if (nullptr == pSrc)
    {
        return nullptr;
    }
    if (pDst == pSrc)
    {
        return pDst;
    }
    pDst = (char *)malloc(strlen(pSrc) + 1);
    //char *p = pDst;
    //while ((*p++ = *pSrc++) != '\0'); 
    while (*pSrc != '\0')
    {
        *pDst = *pSrc;
        *pDst++;
        *pSrc++;
    }
    *pDst = '\0';
    return pDst;
}

在我注释掉的两行中,为什么需要一个在用一个char *p来保存最开始传入的det的地址呢?
另外我按照代码上的方法调试(非注释掉的方法),发现还是能够赋值,但是函数结束后其赋值就失败了。。是因为我直接用malloc返回的内存的地址dst来赋值就不行吗?为什么呀?
为什么将dst在传给char *p过后就可以赋值实现strcpy,但是直接操作dst在函数结束后赋值就失败了?
难道直接用malloc返回的内存的地址dst不能进行操作?
照理说char *p作为局部变量在函数结束后就会被释放,但是申请到的stelen(Src)+1字节的内存不会被释放掉呀,但是为什么直接操作dst来赋值得到的效果就像是dst指针被释放掉了一样?

  • 写回答

2条回答 默认 最新

  • COCO_AS 2017-11-30 10:16
    关注

    返回给函数调用者的应是分配的**起始**位置,对指钱进行++操作后,指针不断后移,已经发生了改变。

    评论

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多