我试图更好地理解指针,但很难弄清楚为什么我的代码会导致调试断言失败。
当我注释掉“while (*neu++ = *s++);”时并在“strcopy(neu, s);”中发表评论它工作得很好。他们不应该这样做吗?
#include <iostream>
#include <cstring>
using namespace std;
void strcopy(char* ziel, const char* quelle)
{
while (*ziel++ = *quelle++);
}
char* strdupl(const char* s)
{
char *neu = new char[strlen(s) + 1];
while (*neu++ = *s++);
//strcopy(neu, s);
return neu;
}
int main()
{
const char *const original = "have fun";
cout << original << endl;
char *cpy = strdupl(original);
cout << cpy << endl;
delete[] cpy;
return 0;
}
最佳答案
strcopy
获取指针 neu
的拷贝,因此 neu
在返回时仍指向字符串的开头。使用 strdup1
内部的 while 循环,您可以在返回之前修改 neu
。在这个指针上调用 delete
会导致失败,因为它与 new
'd 的不同。
解决方案是使用临时变量来增加和复制字符串。
char *neu = ...
char *tmp = neu;
while (*tmp++ = *s++);
return neu;
关于c++ - 使用指针时调试断言失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36021265/