Проблема в том, что вы вызываете realloc:
// new array allocate with large size and copy data to new array
nwData = realloc(strp->data, nbytes);
nwData имеет тип char *
, но realloc
возвращает void *
.См. https://en.cppreference.com/w/c/memory/realloc для получения дополнительной информации.Вместо этого вы должны привести к char *
, как при настройке name.data
:
nwData = (char *)realloc(strp->data, nbytes);
Я предполагаю, что вы компилируете с g ++?Если вы пишете программу на C, вы должны скомпилировать с помощью gcc, который будет компилироваться в соответствии с семантикой языка C, а не C ++.
В качестве примечания, я вижу, что вы вручную устанавливаете оставшуюся часть массива\0
в цикле:
// filled with '\0' in remaining space of new array
for (int lp = lnth; lp < nbytes; lp++)
{
strp->data[lp] = '\0';
}
Как правило, гораздо быстрее (и лучший стиль кода) использовать встроенную функцию memcpy
вместо цикла:
memset(strp->data + lnth, nbytes - lnth, '\0');