Я дурачился с malloc, realloc и free, чтобы написать некоторые базовые функции для работы со строками C (char *). Я столкнулся с этой странной проблемой при удалении последнего символа из строки. Я написал функцию с таким прототипом:
int string_erase_end (char ** dst, size_t size);
Предполагается, что строка "dst" должна быть сокращена на один символ. До сих пор я придумал этот код:
int string_erase_end (char ** dst, size_t size)
{
size_t s = strlen(*dst) - size;
char * tmp = NULL;
if (s < 0) return (-1);
if (size == 0) return 0;
tmp = (char*)malloc(s);
if (tmp == NULL) return (-1);
strncpy(tmp,*dst,s);
free(*dst);
*dst = (char*)malloc(s+1);
if (*dst == NULL) return (-1);
strncpy(*dst,tmp,s);
*dst[s] = '\0';
free(tmp);
return 0;
}
В main (), когда я обрезаю строки (да, я вызывал malloc на них ранее), я получаю странные результаты. В зависимости от количества символов, которые я хочу обрезать, оно либо работает нормально, либо обрезает неправильное количество символов, либо выдает ошибку сегментации.
У меня нет опыта динамического распределения памяти, и я всегда использовал C ++ и его std :: string для выполнения всей такой грязной работы, но на этот раз мне нужно сделать эту работу в C. Я был бы признателен, если бы кто-то помог мне найти и исправьте мою ошибку (ы) здесь. Заранее спасибо.