C++ 在C+中实现复制字符串功能+;
我正在尝试实现Copystring功能,其中我不希望将目标字符串作为返回值返回,而是希望在下面的Copystring()方法中将其作为out参数发送。我也渴望只在CopyString块中分配内存C++ 在C+中实现复制字符串功能+;,c++,string,pointers,visual-c++,copy,C++,String,Pointers,Visual C++,Copy,我正在尝试实现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++) st
#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;
}
#包括“stdafx.h”
无效复制字符串(char*strSrc、char*strDsn、int-iLen)
{
strDsn=新字符[iLen];
对于(int i=0;i
现在,当我进行值传递时,CopyString方法的strDsn对象将在StackUnwind发生时被销毁,因此调用方将无法获取复制的值。如何继续?我刚刚复制了你的代码并做了一些更改,但是如果你想取出新创建的内存,你需要一个指向指针的指针(你可以对指针进行引用,但是,呃,指针在调用端显示了更多,它可能会被修改)
#包括“stdafx.h”
void CopyString(char*strSrc,char**strDsn,int-iLen)//strDsn是ptr到ptr的一个ptr。
{
*strDsn=new char[iLen+1];//更新ptr值。+1表示空终止符。
对于(int i=0;i <代码>请阅读RAI-这就是,你所做的是完全错误的(从我的角度来看)-至少使它<代码> char & STRDSN < /Cord> C或C++选择一个。strDsn=新字符[iLen]除非通过引用获取此参数,否则代码>将无法正常工作:void CopyString(char*strSrc,char*&strDsn,int-iLen)
@πάνταῥεῖ char*strDsn&
不正确。请注意:指向文本字符串的指针应为常量(const char*mystrSrc=“…”
)。指向CopyString
的源指针应为const(const char*strSrc
)。在printf(delete[]mystrDsn
)之后,需要释放在CopyString
中分配的内存。将非格式字符串作为格式传递给printf可能很危险,因为它将被解析。(printf(“%s”,mystrDsn)
)。复制内存是否比分配每个值更好?@Hayden,我认为问题的关键在于编写内存复制器。如果你看他们使用while循环(我更喜欢)。我认为最好的代码是可读的代码,因为优化器做了很多疯狂的事情,通常尝试过早地优化代码会使优化器更加困难,如果性能不是问题,您不应该为性能问题而烦恼(除非问题很明显)。
#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;
}