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

关于复现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
    关注

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

    评论

报告相同问题?