Для жизни моего я не могу понять, почему эта программа не работает. Я пытаюсь соединить две строки с помощью указателей и продолжать получать эту ошибку:Добавление строк с помощью указателей В 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;
}
Я пытался перераспределить во временную переменную и получить ту же ошибку. Любая помощь приветствуется.
EDIT: Спасибо за все ответы. Этот сайт потрясающий. Я не только знаю, где я поступил не так (простая ошибка, я думаю), но я нашел довольно большое отверстие в том, что я не знал о струнах. Поскольку я не могу использовать функцию strcpy, я реализовал свою собственную. Это исходный код для strcpy.
char *string_copy(char *dest, const char *src)
{
char *result = dest;
while (*dest++ = *src++);
return result;
}
После таНос-ки памяти для указателя на строку, чтобы присвоить ему некоторые данные, которые вы можете захотеть сделать что-то например strcpy (str, «Hello»); – TheCodeArtist
@ TheCodeArtist и Армин Спасибо! Ничего себе, мои умения C не в курсе, я думаю. Как я могу назначить строку выделенной памяти без использования strcpy? Это назначение, и мне не разрешено использовать библиотеку string.h. – Raz
Могу ли я создать новый указатель, указывающий на начало строкового литерала, а затем зациклировать новый указатель на выделенную память для указателя str? – Raz