Задать вопрос
@Apexis

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

Нужно записать в переменную часть строки (char) неопределенной длинны. Для этого использую динамическое выделение памяти. Чтобы это сделать нужно сначала пройтись по строке и выяснить размер подстроки, потом пройтись еще раз по строке и записать подстроку в переменную. Я правильно понял? Если размер переменной фиксирован как потом дописать в строку? Можно использовать класс string, но интересно как вручную работать со строками.
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Нетология
    Специалист по информационной безопасности + нейросети
    12 месяцев
    Далее
  • Компьютерная академия «TOP»
    Учебная программа “Разработка программного обеспечения”
    30 месяцев
    Далее
  • Нетология
    Разработчик на C++: Профессия + специализация + нейросети
    12 месяцев
    Далее
  • Skillbox
    Разработчик на C++
    7 месяцев
    Далее
  • Специалист.ру
    Программирование на языке C (Си)
    1 месяц
    Далее
  • Специалист.ру
    Программирование на Visual С++
    1 месяц
    Далее
  • XYZ School
    Геймплей-программирование
    5 месяцев
    Далее
Решения вопроса 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;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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