Ce que je veux faire est de lire un fichier appelé "test.txt", puis avoir le contenu du fichier est un type const char *. Comment ferait-on cela?fstream pour const char *
Répondre
#include <string>
#include <fstream>
int main()
{
std::string line,text;
std::ifstream in("test.txt");
while(std::getline(in, line))
{
text += line + "\n";
}
const char* data = text.c_str();
}
Veillez à ne pas appeler explicitement la suppression des données
serait 'std :: string texte; std :: getline (dans, texte, EOF); const char * data = text.c_str(); 'travailler plus vite? –
Je prévoyais d'ajouter une autre solution qui utilise sstream au lieu de chaîne mais j'ai trouvé la solution par eq-, que je recommande fortement car elle est beaucoup plus efficace car vous allouez et libérez de la mémoire à chaque ligne. –
Vous devez:
- créer une fonction renvoyant un const char *
- ouvrir un
fstream
sur le fichier - chercher jusqu'à sa fin
- déterminer la longueur du fichier en regardant la position du fichier (
tell
) - cherchent Retour au début
- créer un char * pour contenir le contenu du fichier
- lire le contenu du fichier dans le char *
- retour le pointeur de char *, avec le retour de la fonction en ajoutant le const
- le fichier est fermé automatiquement par le fstream sortir du champ
Il est peu probable que vous très vraiment envie de le faire. Le contenu du fichier (qui peut être soit du texte, soit des données binaires) ne représentera probablement pas un pointeur (valide) vers un char sur votre architecture, donc il n'est pas vraiment significatif de le représenter comme [const char *
]. Au lieu de cela, vous pouvez charger le contenu du fichier en mémoire, puis stocker un pointeur (de type const char *) au début du bloc donné. </pédanterie > Une façon de réaliser que:
#include <sstream>
#include <fstream>
// ...
{
std::ostringstream sstream;
std::ifstream fs("test.txt");
sstream << fs.rdbuf();
const std::string str(sstream.str());
const char* ptr = str.c_str();
// ptr is the pointer we wanted - do note that it's only valid
// while str is valid (i.e. not after str goes out of scope)
}
ne devrait-ce pas être
Ouais. Je gâche ça à chaque fois, ce qui est étrange puisque j'apprends habituellement de mes erreurs. (J'utilise rarement les chaînes de caractères, et "chaque fois" je me réfère à la mauvaise en-tête.) Correction. –
- 1. const char * à TDesC16
- 2. Tableau de const char *
- 3. Conversion invalide de const char en char - Suppression de voyelle
- 4. const char * en C++
- 5. Cast "vide const *" à "const char *"
- 6. Impossible de convertir const char * en char *
- 7. convertir BSTR à const char *
- 8. nsstring et const char * conversion
- 9. Que surcharge l'opérateur ici: String8 :: operator const char *() const
- 10. Différence entre const char * p et le charbon const * p
- 11. peut const char * cause des problèmes?
- 12. const unsigned char * à std :: string
- 13. erreur C avec pointeur et const char []
- 14. Comment faire pour importer const char * API en C#?
- 15. Libération de la mémoire pour const char * variable en C++
- 16. Cast booster :: shared_array <char> pour booster :: shared_array <const char>
- 17. Variables non équivalentes fstream vs. déclaration
- 18. Append entier à la fin de const char * C++
- 19. coulée pointeur vide const tableau de pointeurs const char correctement dans C
- 20. Comment convertir 'const wchar *' en 'const char *' sur Mac OS X?
- 21. Pourquoi cela permet-il la promotion de (char *) vers (const char *)?
- 22. Comment convertir un System :: String^en const char *?
- 23. Combien de chaînes dans un const char * str []?
- 24. unsigned char * à Const TDesC8 dans Symbian C++
- 25. compare le tampon avec const char * en C++
- 26. Comment vérifier si une valeur de const char * est définie?
- 27. convertir std :: wstring en const * char en C++
- 28. pinvoke C#: comment puis-je mapper "const char ** output"?
- 29. 'std char virtuel :: ctype <wchar_t> :: do_narrow (wchar_t, char) const' est protégé
- 30. essayant de compiler la bibliothèque d'agitation: erreur: conversion non valide de 'const char *' en 'char *'
Êtes-vous sûr que vous avez besoin d'un '' const char *? Si vous avez besoin de quelque chose pour passer dans une fonction qui prend 'const char *', alors vous pouvez juste passer un 'char *' si c'est plus pratique pour vous. –
duplication possible de [Quelle est la meilleure façon de slurp un fichier dans une chaîne std :: en C++?] (Http://stackoverflow.com/questions/116038/what-is-the-best-way-to-slurp -a-file-into-a-stdstring-in-c) –