C++在特定位置插入字符串到另一个字符串

C++在特定位置插入字符串到另一个字符串,c++,C++,我已经构建了一个自定义字符串类。我试图构建一个自定义插入函数,将字符串插入到指定位置 例如: String str("test"); str.insert(2, "animal"); 将返回: "tesanimalt" 到目前为止,我所拥有的: String& String::insert(int pos, const String& str) { char newString[100]; strncpy(newString, chars, pos); ne

我已经构建了一个自定义字符串类。我试图构建一个自定义插入函数,将字符串插入到指定位置

例如:

String str("test");
str.insert(2, "animal");
将返回:

"tesanimalt"
到目前为止,我所拥有的:

String& String::insert(int pos, const String& str) {
   char newString[100];
   strncpy(newString, chars, pos);
   newString[pos] = '\0';
   strcat(newString, str.chars);
   strcat(newString, chars + pos);
   return *this;
}

代码有很多问题,其中之一是字符串似乎不包含任何实际存储。而是将局部数组作为临时变量分配,然后将其丢弃

在没有MCVE的情况下不可能修复此问题,因为我们无法看到字符串应该如何工作。似乎有一种叫做chars的成员,你可能想复制到它。但是,如果它包含使用malloc或new[]分配的缓冲区,如果m是封闭字符串的长度,n是插入字符串的长度,您可以在位置i插入:

将目标字符串的缓冲区重新分配到其新大小—两个字符串的大小之和(不带终止null)加上一个字节(表示终止null)。或者,分配一个新的缓冲区并复制封闭字符串的第一个i元素。 将封闭字符串n元素的元素i到n移动到调整大小的缓冲区的右侧。 将要插入的字符串复制到位置i到i+n-1。 将终止null写入位置m+n。 由于您似乎希望修改封闭字符串,因此如果您创建了新缓冲区,请取消分配旧缓冲区。如果重新分配了缓冲区,请将chars设置为可能更改的值。
你好嗯,坏消息:你忘了把你的问题包括在问题中。想快速编辑一下吗?非常感谢,太复杂了。OP可以用一个strpy本地字符串chars-to-chars-back在返回之前修复该问题。@S.M.不太可能。该代码还存在一些其他问题,例如缺少任何边界检查。此外,问题并没有说明是否动态分配字符,或者如果是,如何分配。而且,这种方法的效率会更低。@S.M.非常感谢!我添加了以下行strcpychars,newString;“代码工作正常。”乔恩高兴地说,它是有效的,但我强烈建议,无论何时,您总是在C或C++中复制或从数组中检查界限。至少,使用strncpy而不是strcpy。@S.M:请不要问其他堆栈溢出同事你是瞎子吗?参考你删除的帖子