gpt4 book ai didi

c - 在 C 中使用指针追加字符串

转载 作者:行者123 更新时间:2023-12-04 11:58:19 26 4
gpt4 key购买 nike

对于我的生活,我无法弄清楚为什么这个程序不起作用。我正在尝试使用指针连接两个字符串并不断收到此错误:

a.out(28095) malloc: *** error 
for object 0x101d36e9c: pointer being realloc'd was not allocated
*** set a breakpoint in malloc_error_break to debug

我的 str_append.c:

#include <stdio.h>
#include <stdlib.h>
#include "stringlibrary.h" /* Include the header (not strictly necessary here) */

//appends s to d
void str_append(char *d, char *s){
int i=0, j=0;

d = realloc(d, strlength(d)+strlength(s)+1);
//find the end of d
while(*(d+i)!='\0'){
i++;
}


//append s to d
while(*(s+j)!='\0'){
*(d+i)=*(s+j);
i++;
j++;
}
*(d+i)='\0';


}

我有自己的 strlength 函数,我 100% 确定它可以工作。

我的主.c:

#include <stdio.h>
#include <stdlib.h>
#include "stringlibrary.h"

int main(int argc, char **argv)
{
char* str = (char*)malloc(1000*sizeof(char));
str = "Hello";
char* str2 = (char*)malloc(1000*sizeof(char));
str2 = " World";

str_append(str, str2);


printf("Original String: %d\n", strlength(str));
printf("Appended String: %d\n", strlength(str));


return 0;
}

我已经尝试重新分配到临时变量并收到相同的错误。任何帮助表示赞赏。

编辑:感谢所有的答案。这个网站很棒。我不仅知道我哪里出错了(我想是简单的错误),而且我发现我对字符串不了解的地方有一个很大的漏洞。由于我无法使用 strcpy 函数,因此我实现了自己的函数。它基本上是 strcpy 的源代码。

char *string_copy(char *dest, const char *src)
{
char *result = dest;
while (*dest++ = *src++);
return result;
}

最佳答案

你的问题在这里

char* str = (char*)malloc(1000*sizeof(char));
str = "Hello";

首先,您为 1000 个字符分配空间,并将您的指针指向该内存的开头。
然后在第二行中,将指针指向导致内存泄漏的字符串文字。
您的指针不再指向分配的内存。
稍后在您的函数中,您尝试更改只读的字符串文字。

关于c - 在 C 中使用指针追加字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15778039/

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