11
votes

Écrire et lire la chaîne au fichier binaire C ++

im avoir des problèmes d'écriture de la chaîne dans un fichier binaire. Ceci est mon code: xxx pré>

alors, j'essaie de le lire, P>

char* buffer = (char*) malloc(sizeof(string));
ifstream infile("myfile.txt", ifstream::binary);    
infile.read(buffer, sizeof (prueba));
std::string* elem = (string*) buffer;
cout << *elem;
infile.close();


8 commentaires

On dirait que vous écrivez les données d'objet à chaîne, mais cela n'écrit probablement pas le texte stocké dans l'objet. Vous devriez utiliser des flux en C ++. L'équivalent à la tenue de texte <<.


@Mark Une recherche rapide révélée: cplusplus.com/reference/string/string


Publiez un code collé réel, s'il vous plaît. En supposant que string est std :: string , cela ne compilera pas: chaîne * texte = "texte";


Il y a beaucoup de mal ici, dans la compréhension de base de la façon dont C ++ fonctionne. Vous semblez être un programmeur C qui essaie de faire fonctionner les choses C ++. Vous devriez arrêter et lire un livre sur C ++. Et surtout, réalisez que C ++ est un animal différent (celui que vous devriez presque jamais utiliser malloc avec).


Est-ce que cela compile même? : chaîne * test = "texte"; Ideone.com/tcqhp


@HMJD: Non, ça ne le fait pas. Tout compilateur qui l'accepte est brisé au-delà de la réparation.


@Billjames - "Une recherche rapide" n'aide pas ici, car cette chaîne pourrait être n'importe quoi, pas nécessairement std :: chaîne .


Dupliqué possible de C ++ - Ecrire correctement STD :: String to binaire


7 Réponses :


1
votes

devrait probablement utiliser également c_str () pour obtenir le pointeur de caractère aussi, au lieu de cette jette folle droite.


1 commentaires

En supposant que est std :: string . La chaîne est utilisée de manière assez étrange.



10
votes

La ligne xxx

n'est pas correcte

Tailleof (String) ne renvoie pas la longueur de la chaîne, elle renvoie le Taille de type de chaîne en octets.

Ne pas lancer de texte sur Char * Utilisation d'une zone C, vous pouvez obtenir la maintien du caractère * à l'aide de la fonction de membre appropriée text.c_str ()

Vous pouvez simplement écrire xxx

à la place.


0 commentaires

3
votes
  • Pourquoi utilisez-vous des pointeurs vers STD :: String Classe?
  • Vous ne devez pas utiliser sizeof avec std :: string , car il renvoie la taille de l'objet std :: chaîne objet, et non la taille réelle de la chaîne à l'intérieur.

    Vous devez essayer: xxx

    ou xxx


0 commentaires

-1
votes

Essayez ce code de code.

/* writing string into a binary file */

  fstream ifs;
  ifs.open ("c:/filename.exe", fstream::binary | fstream::in | fstream::out);

  if (ifs.is_open())
  {
   ifs.write("string to binary", strlen("string to binary")); 
   ifs.close();
  }


0 commentaires

10
votes

Pour écrire un fichier STD :: String à un fichier binaire, vous devez enregistrer la longueur de la chaîne d'abord:

std::string str;
size_t size;
infile.read(&size, sizeof(size));
str.resize(size);
infile.read(&str[0], size);


1 commentaires

Cela a fonctionné pour moi avec un changement. Dans le code d'écriture, j'ai changé de wortfile.write (& Str [0], taille); surveti.write (str.c_str (), taille);



0
votes

Votre code est incorrect de mauvaise manière que vous utilisez pour écrire et lire le fichier et erreur d'extension de fichier que vous essayez de lire le fichier texte .txt Code correct

écrire dans le fichier xxx

fichier de lecture xxx

essayez ceci, il fonctionnera


2 commentaires

Nous apprécions votre réponse, mais c'est une question de 5 ans.


@Sandeesh Je pense que cela n'aurait pas d'importance tant que la réponse est dans un format "Okay-ISH", qui est, de mon point de vue



0
votes

J'ai eu le même problème. J'ai trouvé la réponse parfaite ici: Wrive Fichier en format binaire

Problèmes clés: Utilisez la chaîne :: Longueur Pour obtenir la longueur de la chaîne lorsque vous écrivez et utilisez Redimension () avant de lire la chaîne. Et à la fois pour la lecture et l'écriture, utilisez mystring.c_str () à la place de la chaîne elle-même.


0 commentaires