试图将char *复制到另一个char *

时间:2018-04-15 14:57:41

标签: c++ string memory char allocation

我的问题是我的代码

char* strdup(const char* s)
{
    int n = 0;

    for(; *s != 0; s++)
    {
        n++;
    }

    char* p = new char[n+1];

    for(int i = 0; i < n; i++)
    {
        p[i] = s[i];
    }
    p[n] = 0;

    return p;
}

int main()
{
    const char* p = "testing";

    char* p_copy = strdup(p);

    std::cout << p << '\n' << p_copy << std::endl;

    return 0;
}

没有按预期工作。

我想编写一个函数,它接受const char *并将其复制到新分配的char内存中。完成后,它应该返回一个指向char的指针。

现在当我试一试时,我的输出就是:

testing

感谢您提前提供任何帮助

2 个答案:

答案 0 :(得分:1)

在开始将s复制到p之前,请尝试不要递增for。我注意到在你的第一个s循环中,你增加AAPT2 error: check logs for details 直到它指向一个null,然后再使用该指针值来启动你的字符串副本。难怪你得到一个空字符串。

答案 1 :(得分:0)

下面:

s

您递增for(int i = 0; i < n; i++) { p[i] = s[i]; 。所以它不再指向输入字符串的开头。它指向字符串的null终止符。然后,在这里:

n

您尝试从空终止符开始复制s个字符,最后读取超出具有未定义行为的数组末尾。

解决方案:复制const char* s2 = s; for(; *s2 != 0; s2++) 以计算字符数:

strlen

更好的是,您可以将长度计数部分重构为名为{{1}}的可重用函数。

相关问题