我正在尝试实现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;
}