Я делаю пользовательскую функцию копирования следующим образом:
if (s1 == NULL || s2 == NULL || s2->buf == NULL)
return;
if (s1->len + 1 < s2->len + 1)
{
if (s1->buf)
free (s1->buf);
s1->buf = (char *) malloc (s2->len + 1);
if (s1->buf == NULL)
return;
}
for (int i = 0; i < s2->len; i++)
s1->buf[i] = s2->buf[i];
s1->len = s2->len;
, где s1 и s2 - просто структурные указатели, в которых есть указатель на символ и целое число без знака.
if (s1->len + 1 < s2->len + 1)
{
if (s1->buf)
free (s1->buf);
s1->buf = (char *) malloc (s2->len + 1);
if (s1->buf == NULL)
return;
}
это проверит, достаточно ли места внутри s1 для места s2.если нет, он проверит существующую память и освободит ее.после того, как это будет сделано, он выделит новый блок памяти для s1, который имеет размер s2 + 1 (включая \ 0).
здесь я запутался
если в указателе char достаточно места для s2, чтобы поместиться в s1 (включая \ 0), и он не освобождает () и снова не вызывает malloc (), он просто присваивает цикл for, сохранит ли оноригинальное содержание s1?