我正在尝试实现Copystring功能,其中我不想将我的目标字符串作为返回值返回,并希望在下面的CopyString()方法中将其作为out参数发送。我也渴望只在CopyString块内分配内存。

#include "stdafx.h"
void CopyString (char *strSrc, char* strDsn, int iLen)
{
    strDsn = new char[iLen];

    for (int i=0; i< iLen; i++)
        strDsn[i] = strSrc[i];

}

int main()
{
    char * mystrSrc = "Testing Copy Method";

    int iLen = 0;
    for(int i=0; mystrSrc[i] != '\0'; i++)
        iLen++;

    char * mystrDsn = 0;
    CopyString (mystrSrc, mystrDsn, iLen);

    printf(mystrDsn);
    return 0;
}


现在,当我执行“按值传递”时,在Stackunwinding发生时,CopyString方法的strDsn对象将被破坏,因此调用者将无法获取复制的值。怎么继续?

最佳答案

我只是复制了代码并进行了一些更改,但是如果您想获取新创建的内存,则需要一个指向指针的指针(可以对指针进行引用,但是,指针在调用方会显示更多信息,可以修改)。

#include "stdafx.h"
void CopyString (char *strSrc, char** strDsn, int iLen) // strDsn is a ptr to ptr.
{
    *strDsn = new char[iLen + 1]; // update the ptr value. + 1 for null terminator.

    for (int i=0; i< iLen; i++)
        *strDsn[i] = strSrc[i]; // index painfully (would be look nicer with a temp variable).

}

int main()
{
    char * mystrSrc = "Testing Copy Method";

    int iLen = 0;
    for(int i=0; mystrSrc[i] != '\0'; i++)
        iLen++;

    char * mystrDsn = 0;
    CopyString (mystrSrc, &mystrDsn, iLen); // pass the address of mystrDsn

    printf(mystrDsn);
    return 0;
}

07-28 12:47