@parkito

Как считать строки в массив?

Здравствуйте. Помогите пожалуйста решить следующую проблему:
Программа должна считывать строки в символьный массив из файла.
Файл in.txt следующий
AA
BB
CC
DD

Написанная мною программа работает не верно. Вместо помещения в массив строк из файла, он заполняется только последней строкой. т.е.
СС
СС
СС
СС
СС

В процессе дебага я заметил просто поразившую меня вещь. Строка считывается нормально, заносится в массив, считывается следущая строка, а затем предыдущий и следующий элементы массива заполняются новым. И так получается что последняя строка дублируется на весь массив. Подскажите в чем мой косяк?
Код программы
#include "stdlib.h"
#include "string.h"
#include <iostream>
#include <fstream>
using namespace std;
int main() {
    setlocale(LC_ALL, "Rus");
    const int DAYS = 5;
    char *array[DAYS];
    ifstream in;
    in.open("in.txt");
    if (in.fail()) {
        cout << "Ошибка. Файл не найден! ";
        cin.get();
        cin.get();
        exit(0);
    }

    char *str;
    for (int i = 0; i < 5 ; i++) {
        in>>str;
        array[i]=str;
         }
     in.close();
    for (int i = 0; i <5 ; ++i) {
        cout<<array[i]<<endl;

    }
    cin.get();
    cin.get();
    return 0;
}
  • Вопрос задан
  • 3523 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Чтение в невыделенный буфер ( char *str;). Хорошо еще, программа не валится. Память под строку надо выделять.

Так как у вас тут C++, проще всего научиться таки использовать std::string
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
slinkinone
@slinkinone
Агент "Везде успеть"
Нужно выделять память под str перед считыванием...
Представьте что у вас есть переменная типа указатель, но чтобы начать писать по этому указателю, необходимо выделить память...А при << программа пытается перенести всё из in в область, на которую указывает str...Но т.к. под str ничего не выделено, программа пишет в область, которая возможно не предназначена для записи и может испортить данные кучи...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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