私の人生では、なぜこのプログラムが機能しないのかわかりません。ポインターを使用して 2 つの文字列を連結しようとしていますが、このエラーが発生し続けます。
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';
}
私は100%確実に機能する独自のstrlength関数を持っています。
私のmain.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;
}