trinitr0
@trinitr0
провинциальный админ

Как написать функцию посимвольного ввода с возвратом введённой строки?

Помогите пожалуйста в реализации функции, которая считывает посимвольно ввод, до тех пор пока не достигнет конца ввода или не встретится символ переноса строки. Функция должна возвращать C-style строку с прочитанными символами.

Пытался так:

char* getline()
{
    char in;
    int i=0;
    
    char* pOld = new char[1]; 
    char* pNew = new char[1];  

    while(cin.get(in) && (in != '\n'))
    {
          i++;
          pOld[i]=in;
    }  
     
    delete [] pNew;
    pOld[i] = '\0'; 
    
    return pOld; 
}

Но это вызывает segmentation fault.
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
trinitr0
@trinitr0 Автор вопроса
провинциальный админ
Со сторонней помощью и собственных усилий решил так:

char *getline()
{
    char in;
    int i=0;
    char* pOld = new char[1];  
    
    while(cin.get(in) && (in != '\n')){ 
        ++i;
        pOld[i-1] = in;
        char* pNew = new char[i+1]; 
        
        for (int j=0;j<i;++j){ 
                pNew[j] = pOld[j];
        }   

        delete [] pOld;
        pOld = pNew;
    }
 
pOld[i] = '\0';
return pOld; 
}

Буду рад комментариям и замечаниям!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Все правильно, segfault. Ты выделяешь массив old размером в 1, а обращаешься к нему с индексом, большим, чем выделил.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Crypterium Москва
от 60 000 ₽
Crypterium Москва
от 60 000 до 100 000 ₽
Crypterium Москва
от 300 000 до 360 000 ₽
07 авг. 2020, в 19:24
4000 руб./за проект
07 авг. 2020, в 18:56
1 руб./за проект