gpt4 book ai didi

c - 连接字符串时出错

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:07 25 4
gpt4 key购买 nike

我正在尝试创建一个在另一个字符串之后附加一个字符串的函数。我目睹了以下错误。请帮忙。* glibc 检测到 ./a.out:realloc():无效的旧大小:0x00007fff7af0d450 **

// The following code concatenates the orignal string into the another
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void strcatstring(char *str,char *newstr)
{
int m=strlen(str);
int n=strlen(newstr);

newstr=(char *)realloc(newstr,10*sizeof(char));
char *newstr1=(char *)malloc(10*sizeof(char));
newstr1=newstr;

while(*newstr!='\0')
{
++newstr;
}
while(*str!='\0')
{
*newstr=*str;
++newstr;
++str;
}

printf("%s",newstr1);
}


int main()
{
int n=6;char *str;char str1[10];
str1[0]='y';
str1[1]='u';

str=(char *)malloc(n*sizeof(char));
printf("\nEnter the string\n");
scanf("%s",str);
puts(str);
strcatstring(str,str1);

return 0;
}

最佳答案

问题是您首先尝试重新分配未分配的内存(以 realloc 想要的方式)。

您在main 函数中将str1 声明为一个数组,此内存将由编译器分配在栈上而不是堆上。 realloc 函数只能通过 malloccalloc 或更早的 realloc 调用重新分配在堆上分配的内存.

如果 realloc 调用有效,那么您会发生内存泄漏,因为您分配内存并将其分配给 newstr1 并在下一行中覆盖 newstr1 指针与 newstr 指针。

而且您真的不应该分配固定大小,请记住您将一个大小为 m 的字符串附加到一个大小为 n 的字符串。想一想如果 m + n 大于 9 会发生什么。这导致了下一个问题,即您没有终止结果字符串,因为您没有复制终止 '\0' 字符。

关于c - 连接字符串时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17569539/

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