Я играю с моей собственной библиотекой строк, что, кстати, ужасно, но я делаю это ради опыта.
В любом случае, у меня есть некоторые функции, которые выделяют блок памяти для String*
, и он работает нормально. Вся используемая память освобождается при вызове функции string_delete(string*)
.
Но я придумал новый способ представления char*
s как String*
s, но я боюсь, что память, которую я зарезервировал для нее, не освобождается в будущем. Вот функция:
String* String_ToN(char* dest) {
String* temp = calloc(1, sizeof (struct String));
temp->length = strlen(dest);
temp->buffer = (char*) malloc(temp->length + 1);
strncpy(temp->buffer, dest, temp->length);
return temp;
}
Мне не нравится использовать strdup
, поскольку он не является стандартным c, поэтому я буду придерживаться malloc
и strncpy
.
Это работает, и то, для чего я его использую, выглядит примерно так:
String_GetLength(String*)
принимает параметр String*
, поэтому, если я добавлю строковый литерал при его вызове, я получу ошибку.
Так что вместо этого я иду String_GetLength(String_ToN("hello"))
и он возвращает 5, как я ожидал.
Но опять же, в String_ToN
я использую calloc
и malloc
, как бы мне освободить эту память и все еще иметь возможность использовать ToN
?