gpt4 book ai didi

将字符串连接到指针变量的末尾

转载 作者:行者123 更新时间:2023-11-30 19:51:50 25 4
gpt4 key购买 nike

对 C 相当陌生。在某些功能上遇到问题。该函数假设将 str 连接到 *destp 的末尾。首先通过调用 kstrextend() 将 *destp 扩展为足够长以容纳两个字符串的内容。然后将src的内容复制到dest中。

这是我现在的代码,只是因为它可以编译。我想进行更改,以便可以调用 kstrextend() 函数来重新分配内存。另外,我正在运行测试用例,并且在它请求“两个空 kstring 的 kstrcat”之后我有一个核心转储。

    void kstrcat(kstring *destp, kstring src)
{
int lenDest = destp->length;
//int lenSrc = src.length;

destp = realloc(destp,lenDest*sizeof(char));

int i = 0;

while(src.data[i] != '\0')
{
destp->data[i+lenDest+1] = src.data[i];
}
destp->data[i+lenDest+1] = '\0';
}

这也是我的 kstrextend 函数,以供引用或我可能需要更改的任何内容。

    void kstrextend(kstring *strp, size_t nbytes)
{
char *data1;
int len=strp->length;
if(len < nbytes)
{
//allocate a new array with larger size
data1 = realloc(strp->data, nbytes);
if(data1 == NULL)
{
abort();
}
strp->data = data1;
strp->length = nbytes;
//remaining space of new array is filled with '\0'
for (int i = len; i < nbytes; i++)
{
strp->data[i] = '\0';
}
}
}

最佳答案

分配给目标字符串时,不应向索引添加 1。这会留下结束目标字符串的空字节,而不是用源的第一个字节覆盖它。

此外,您忘记在循环中增加 i

void kstrcat(kstring *destp, kstring src)
{
int lenDest = destp->length;
int lenSrc = src.length;

kstrextend(destp, lenDest + lenSrc);

int i = 0;
while(src.data[i] != '\0')
{
destp->data[i+lenDest] = src.data[i];
i++;
}
destp->data[i+lenDest] = '\0';
}

关于将字符串连接到指针变量的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327726/

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