Я создаю массив (char *charheap;
) длиной 32 байта в куче и инициализирую все элементы, которые должны быть \0
. Вот моя главная функция:Возвращаем смежный блок в c
int main(void) {
char *str1 = alloc_and_print(5, "hello");
char *str2 = alloc_and_print(5, "brian");
}
char *alloc_and_print(int s, const char *cpy) {
char *ncb = char_alloc(s);// allocate the next contiguous block
if (ret == NULL) {
printf("Failed\n");
} else {
strcpy(ncb, cpy);
arr_print();// print the array
}
return ncb;
}
Вот что я реализую:
/char_alloc(s): find the FIRST contiguous block of s+1 NULL ('\0')
characters in charheap that does not contain the NULL terminator
of some previously allocated string./
char *char_alloc(int s) {
int len = strlen(charheap);
for (int i = 0; i < len; i++) {
if (charheap[0] == '\0') {
char a = charheap[0];
return &a;
} else if (charheap[i] == '\0') {
char b = charheap[i+1];
return &b;
}
}
return NULL;
}
Ожидаемый результат: (\
означает \0
)
hello\\\\\\\\\\\\\\\\\\\\\\\\\\\
hello\brian\\\\\\\\\\\\\\\\\\\\\
Это решение совершенно неправильно, и я просто печать две неудачные. :(
На самом деле, char_alloc
должен возвращать указатель на начало смежного блока, но я не знаю, как реализовать это правильно. Может кто-нибудь дать мне подсказку или ключ?
Что такое 'charheap'? –
charheap [i] вместо charheap [0]? – Jiminion
Здесь 'strlen (charheap)', вы не создали или не передали какой-либо массив charheap, как вы писали в вопросе – 0decimal0