如题,在准备面试的时候发现好多网上复现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指针被释放掉了一样?