1

Тема: ifstream метод read()

Добрий день

Виникла проблема при використанні методу read() класу ifstream.

Використовую Ubuntu IDE Code::Blocks;

Маю структуру

struct Profile
{
    string Name;
    int Age;
    int Width;
    int Heigh;
    string Kierunek;
    double Sredni_bal;
};

Головна функція

int main()
{
    ifstream fin("text.txt");
    Profile p;

    fin.read((char*)&p,sizeof(Profile));  

    return 0;
}


Вміст файлу text.txt:
Igor 1 2 3 Informatyka 23.2

Програма запускається і
Виникає помилка:
Segmentation fault (core dumped)

2 Востаннє редагувалося koala (30.11.2014 12:35:32)

Re: ifstream метод read()

std::string - це не послідовність байтів рядка, а спеціальна конструкція, що містить вказівник на таку послідовність. І, відповідно, його не можна читати за допомогою ifstream::read, який просто закидає послідовність байт з файлу кудись в пам'ять.
Варіанти рішення:
- перевизначити елементи структури std::string на char[] - тоді вони мають бути в файлі фіксованого розміру, але read працюватиме.
- перевизначити istream::operator>>(Profile&) і читати за допомогою не read, а >>.
І, до речі, числа у вас теж читаються неправильно...