我的问题是我的代码
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
感谢您提前提供任何帮助
答案 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}}的可重用函数。