im avoir des problèmes d'écriture de la chaîne dans un fichier binaire. Ceci est mon code: 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();
7 Réponses :
devrait probablement utiliser également c_str () code> pour obtenir le pointeur de caractère aussi, au lieu de cette jette folle droite. p>
En supposant que est i> std :: string code>. La chaîne code> est utilisée de manière assez étrange.
La ligne n'est pas correcte p> Ne pas lancer de texte sur Vous pouvez simplement écrire p> à la place. p> p> P> Tailleof (String) code> ne renvoie pas la longueur de la chaîne, elle renvoie le Taille de type de chaîne en octets. p> Char * Code> 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 () code> p>
STD :: String Code> Classe? Li>
- Vous ne devez pas utiliser
sizeof code> avec std :: string code>, car il renvoie la taille de l'objet std :: chaîne code> objet, et non la taille réelle de la chaîne à l'intérieur. LI>
Vous devez essayer: p> xxx pré> ou p> xxx pré> ul>
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();
}
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);
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);
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 écrire dans le fichier strong> p> essayez ceci, il fonctionnera p> p> .txt code>
Code correct
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
J'ai eu le même problème. J'ai trouvé la réponse parfaite ici: Wrive Fichier en format binaire p>
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. P>
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 code> eststd :: string code>, cela ne compilera pas:chaîne * texte = "texte"; code>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 code> avec).Est-ce que cela compile même? :
chaîne * test = "texte"; code> 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 code> pourrait être n'importe quoi, pas nécessairementstd :: chaîne code>.Dupliqué possible de C ++ - Ecrire correctement STD :: String to binaire