Réponse acceptée !
Je suis même étonné que ça ai marché la première fois !
Tu utilises certaines notions de manières très bancales.
Pour convertir un std::string en char*, on ne prend pas son adresse ! On le convertit grâce à la méthode c_str().
Ensuite, la méthode write prend le nombre de caractères à écrire. Ça sera donc "taille du texte" + 1 (pour le zéro terminal), et non la taille de l'objet "std::string".
De plus, évite absolument les "using namespace", voir:
[ Lien ]
Une variable n'existe que dans une "portée" (toute la zone entre accolades représente une portée). Donc si tu déclares une variable à l'intérieur d'un if, celle-ci n'existe pas en dehors de celui-ci. Il n'est donc pas nécessaire de changer le nom des variables, puisqu'elles ne se "voient" pas.
Enfin, sache que si tu veux sauvegarder un objet en binaire, le mieux est de le sérialiser via Boost:serialize (cherche la bibliothèque Boost sur internet).
Ça donne ceci:
Code C/C++ :
#include <iostream>
#include <fstream>
int main()
{
std::cout << "1-Enregistre __ 2-Ouvre : ";
int choix;
std::cin >> choix;
if (choix == 1)
{
std::ofstream fichier("Fichier_binaire", std::ios::binary);
std::string texte = "Texte_a_sauvegarder";
fichier.write(texte.c_str(), texte.size() + 1);
fichier.close();
}
else if (choix == 2)
{
std::ifstream fichier("Fichier_binaire", std::ios::binary);
char buff[256] = {0};
fichier.read(buff, 255);
fichier.close();
std::string texte(buff);
std::cout << texte << std::endl;
}
return 0;
}
_____________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio