Witam.
Piszę w następującej sprawie, mianowicie mam aplikacje (poniższy przykład jest dość trywialny, wiem aczkolwiek służy on tylko i wyłącznie do zobrazowania problemu ) w której to korzystam z zapisu i odczytu plików binarnych.
Kod obrazujący problem:
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv)
{
int input;
std::cout << "--------------" << std::endl;
std::cout << " 1. save data " << std::endl;
std::cout << " 2. open data " << std::endl;
std::cout << "--------------" << std::endl;
std::cout << "_>";
std::cin >> input;
std::string fileName = "./myFile";
if (input == 1)
{
std::string array[3];
array[0] = "Tomek";
array[1] = "Romek";
array[2] = "Atomek";
std::fstream outputFile(fileName.c_str(), std::ios::out | std::ios::binary);
for (int i = 0; i < 3; i++)
{
/* Opcja tekstowa */
// outputFile << array[i];
// outputFile << std::endl;
/* Opcja binarna */
outputFile.write((char*)&array[i], sizeof(std::string));
}
outputFile.close();
for (int i = 0; i < 3; i++)
{
std::cout << array[i] << std::endl;
}
}
else
{
std::fstream inputFile(fileName.c_str(), std::ios::in | std::ios::binary);
std::string buffer[3];
for (int i = 0; i < 3; i++)
{
/* Opcja tekstowa */
//inputFile >> buffer[i];
/* Opcja binarna */
inputFile.read((char*)&buffer[i], sizeof(std::string));
}
inputFile.close();
/* Log */
for (int i = 0; i < 3; i++)
{
std::cout << buffer[i] << std::endl;
}
}
system("pause");
return 0;
}
Problem polega na tym iż kod kompiluje się aczkolwiek nie działa odczyt pliku binarnego na Linuksie, podczas odczytu wyrzuca błąd: Segmentation fault. Testowałem powyższy przykład w Visual Studio 2015 na Windowsie i wszystko działało zgodnie z oczekiwaniami, zarówno zapis jak i odczyt.
Na dodatek dodam że na Linuksie korzystam z kompilatora GNU C++ w wersji 4.9 oraz że zapis i odczyt z użyciem operatorów << i >> dla plików tekstowych, działa poprawnie.
Przyznam szczerze że nie mam bladego pojęcia skąd ten błąd, czy to jakiś błąd kompilatora czy inne ustrojstwo?
Będę niezmiernie wdzięczny za pomoc w rozwiązaniu problemu.
Pozdrawiam.