gpt4 book ai didi

c - 字符串附加功能不起作用

转载 作者:行者123 更新时间:2023-11-30 15:24:44 26 4
gpt4 key购买 nike

我尝试创建一个可以轻松附加两个字符串的函数。源字符串必须预先动态分配。我运用了我的知识,但这导致了 ub 和任何类型的泄漏。

<小时/>
void strapp (char *source_offset, int position, char *appendage)
{
size_t appendage_size = strlen(appendage);

source_offset = realloc(source_offset, strlen(source_offset) + appendage_size);
sprintf( &source_offset[position], "%s%s", appendage, source_offset + (position + appendage_size) );
}
<小时/>

我做错了什么?

最佳答案

source_offset + (position +appendage_size) 有点奇怪。看来您试图将第二个字符串与第一个字符串的子字符串连接起来,并将结果复制到第一个字符串中。

source_offset + (position +appendage_size) 是从偏移量 position+appendage_size 开始的源字符串的后缀,这是无意义的,因为它超出了源字符串...

也许你想要这样的东西?如果您想连接两个字符串,则以下内容是正确的:

size_t appendage_size = strlen(appendage);
source_offset = realloc(source_offset, position + appendage_size + 1);
sprintf( &source_offset[position], "%s", appendage );

它将appendage附加到source_offset,从position开始。

现在,如果您想在中间插入appendage,这可能会有点棘手:

size_t appendage_size = strlen(appendage);
char *result = malloc(strlen(source_offset) + appendage_size + 1);
char cut = source_offset[position];
source_offset[position] = '\0';
sprintf( result, "%s%s%c%s", source_offset,appendage,cut,source_offset+position+1);
// do hat you want with result

请注意,realloc可能会更改初始内存的基址,因此您不能执行此类操作,因为参数值source_offset只会在本地更改。

关于c - 字符串附加功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28272085/

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