gpt4 book ai didi

c - 如何在定义的位置附加一个字符

转载 作者:太空狗 更新时间:2023-10-29 15:53:54 25 4
gpt4 key购买 nike

我正在尝试在定义的位置添加一个字符。我创建了一个新函数,为另一个字符分配内存,在该位置之后保存字符然后在定义的位置添加我的字符​​,现在我不知道如何删除该位置之后的字符以连接保存的字符串。有什么解决办法吗?

这是我的函数的开始:

void appendCharact(char *source, char carac, int position) {
source = realloc(source, strlen(source) * sizeof(char) + 1); //Get enough memory
char *temp = source.substr(position); //Save characters after my position
source[position] = carac; //Add the character
}

编辑:我正在尝试实现另一个“野蛮”的解决方案,在 Debug模式下我可以看到我有大约我的新字符串,但看起来我无法删除旧指针...

void appendCharact(char *source, char carac, int position) {
char *temp = (char *)malloc((strlen(source) + 2) * sizeof(char));
int i;
for(i = 0; i < position; i++) {
temp[i] = source[i];
}

temp[position] = carac;
for (i = position; i < strlen(source); i++) {
temp[i + 1] = source[i];
}
temp[strlen(temp) + 1] = '\0';
free(source);
source = temp;
}

最佳答案

我提到我可以看到如图所示的代码的五个问题(复制在这里以供引用)

void appendCharact(char * source, char carac , int position)
{
source = realloc(source, strlen(source) * sizeof(char) + 1); //Get enough memory
char * temp = source.substr(position); //Save characters after my position
source[position] = carac; //Add the charactere
}

问题是(无特定顺序):

  1. strlen(source) * sizeof(char) + 1 等于 (strlen(source) * sizeof(char)) + 1。它应该是 (strlen(source) + 1) * sizeof(char)。然而,这很好用,因为 sizeof(char) 在 C++ 规范中被定义为总是等于1

    <
  2. 与上文相关:简单的char字符串真正被称为null-terminated字节串 .因此,它们必须以“空”字符 ('\0') 结束。这个空字符当然需要分配的字符串中的空间,strlen 计算在内。因此,要添加一个字符,您需要分配 strlen(source) + 2 个字符。

  3. 永远不要将您传递给 realloc 的指针赋值回去.如果realloc失败,它会返回一个空指针,让你失去原来的内存,这就是内存泄漏。

  4. realloc函数返回类型为 void*。在 C++ 中,您需要将其转换为正确的指针类型以进行赋值。

  5. 您通过 传递source,这意味着在函数内部您拥有指针的本地副本。当您分配给 source 时,您只分配给本地副本,调用中使用的原始指针不会被修改。


以下是代码或其可能用途的一些其他问题:

  • 关于空终止符,一旦为其分配了足够的内存,您还需要将其添加到字符串中。

  • 如果调用函数时 source 是文字字符串或数组或之前调用 malloc 时未返回的任何内容,callocrealloc,则不能将该指针传递给 realloc

  • 您使用 source.substr(position) 这是不可能的,因为 source 不是对象,因此没有成员函数。

关于c - 如何在定义的位置附加一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54632455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com