對於我的生活,我無法弄清楚爲什麼這個程序不工作。我試圖用三分球來連接兩個字符串,並保持收到此錯誤:在C中使用指針添加字符串
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%肯定的作品。
我的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;
}
的字符串指針的malloc-ING內存後,分配它,你可能想要做的事的一些數據像strcpy(str,「Hello」); – TheCodeArtist
@ TheCodeArtist和Armin謝謝!哇,我的C技能沒有達到鼻菸,我猜。我怎麼可以去分配一個字符串分配的內存而不使用strcpy?這是一項任務,我不允許使用string.h庫。 – Raz
我會創建一個指向字符串文字開頭的新指針,然後將新指針循環到str指針的分配內存中嗎? – Raz