C++ fread() dans une std::string
Comme toujours, des problèmes avec les pointeurs. Cette fois, je suis en train de lire un fichier (ouvert en mode binaire) et de stocker une partie dans un std::string objet.
Voyons voir:
FILE* myfile = fopen("myfile.bin", "rb");
if (myfile != NULL) {
short stringlength = 6;
string mystring;
fseek(myfile , 0, SEEK_SET);
fread((char*)mystring.c_str(), sizeof(char), (size_t)stringlength, myfile);
cout << mystring;
fclose(myfile );
}
Est-ce possible? Je ne recois pas de message. Je suis sûr que le fichier est O. K. Quand j'ai essayer avec char* il ne fonctionne pas mais je veux le ranger directement dans la chaîne. Merci pour votre aide!
mec... ce que vous obtenez à partir de c_str() n'est pas mutable...
le commentaire ci-dessus et répondez ci-dessous sont tous les deux corrects, mais si vous êtes à l'aide de C++, pourquoi êtes-vous à l'aide de C idiomes pour les e/S de fichier
et pour couronner le tout, C++ streaming pour la sortie à droite après.
le commentaire ci-dessus et répondez ci-dessous sont tous les deux corrects, mais si vous êtes à l'aide de C++, pourquoi êtes-vous à l'aide de C idiomes pour les e/S de fichier
et pour couronner le tout, C++ streaming pour la sortie à droite après.
OriginalL'auteur ali | 2012-11-28
Vous devez vous connecter pour publier un commentaire.
Ensemble de la chaîne à être assez grande première pour éviter la saturation de la mémoire tampon, et l'accès au tableau d'octets que
&mystring[0]
pour satisfaireconst
et les autres exigences destd::string
.Il y a beaucoup, beaucoup de questions dans ce code, mais c'est un ajustement minime pour l'utiliser correctement
std::string
.OriginalL'auteur Potatoswatter
string::c_str()
retourneconst char*
laquelle vous ne pouvez pas modifier.Une façon de le faire serait d'utiliser un char* d'abord, et de construire une chaîne de caractères.
Exemple
Mais là encore, si vous voulez une chaîne, vous devriez peut-être demander vous-même
Why am I using fopen and fread in the first place??
fstream
serait une bien meilleure option.Vous pouvez en lire plus à ce sujet ici
Je vois, merci pour le tuyau 🙂
fixe ma réponse..
Qui a dit il n'y a pas de 0 de l'octet à l'intérieur des données binaires? Et pire encore qui a dit que cela de données est null? Vous devez passer à la taille des données à
std::string
ctorOriginalL'auteur Jimmy Lu
Je recommanderais ce produit comme le meilleur moyen de faire une telle chose. En outre, vous devriez vérifier pour s'assurer que tous les octets ont été lus.
OriginalL'auteur Mitchell Findley
S'il vous plaît vérifiez les éléments suivants concernant c_str de voir certaines choses qui ne vont pas avec votre programme. Quelques questions comprennent l'c_str n'étant pas modifiable, mais aussi qu'elle retourne un pointeur vers votre chaîne de contenu, mais vous n'avez jamais initialisé la chaîne.
http://www.cplusplus.com/reference/string/string/c_str/
Comme pour le résoudre... vous pouvez essayer de lecture dans un char* et puis initialisation de votre chaîne.
OriginalL'auteur RonaldBarzell
Non, il ne l'est pas.
std::string::c_str()
la méthode ne retourne pas modifiable séquence de caractères comme vous pouvez le valider à partir de ici. Une meilleure solution serait d'utiliser un tamponchar
tableau. Voici un exemple:OriginalL'auteur diegoperini