@Apexis

Чтобы выделить динамическую память нужно получить данные 2 раза?

Нужно записать в переменную часть строки (char) неопределенной длинны. Для этого использую динамическое выделение памяти. Чтобы это сделать нужно сначала пройтись по строке и выяснить размер подстроки, потом пройтись еще раз по строке и записать подстроку в переменную. Я правильно понял? Если размер переменной фиксирован как потом дописать в строку? Можно использовать класс string, но интересно как вручную работать со строками.
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
Могу ошибаться, но обычно выделяется буфер определённого фиксированного размера, допустим на 256 символов. Далее буфер заполняется строкой. В случае с C-строкой все отлично - она терминируется символом \0 и бОльший размер буфера не помеха. В процессе заполнения буфера, определяем свободное пространство в буфер и по необходимости либо выделяем дополнительный буфер и организуем работу с несколькими, либо выделяем больший буфер и копируем в него содержимое старого.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
char* insert_char(char* str, uint_t pos, char ch)
{
    uint_t len = strlen(str);
    char* new_str = new char[len+1];
    if (pos != 0)
        memcpy(new_str, str, pos * sizeof(char));
    new_str[pos] = ch;
    if (pos != len)
        memcpy(&(new_str[pos+1]), &str[pos], (len - pos) * sizeof(char));
    return new_str;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы