Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中实现复制字符串功能+;_C++_String_Pointers_Visual C++_Copy - Fatal编程技术网

C++ 在C+中实现复制字符串功能+;

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

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