C++ Débutant: Passer un fstream à une fonction pour lire les données
J'ai un fichier texte nommé num.txt
qui n'contenu est la ligne 123
. Puis-je avoir le suivant:
void alt_reader(ifstream &file, char* line){
file.read(line, 3);
cout << "First Time: " << line << endl;
}
int main() {
ifstream inFile;
int num;
inFile.open("num.txt");
alt_reader(inFile, (char*)&num);
cout << "Second Time: " << num << endl;
}
La sortie est:
First Time: 123
Second Time: 3355185
Pouvez-vous m'aider à comprendre comment obtenir un fstream qui est lu dans une fonction toujours attribuer à la variable principale? Je fais cela parce que alt_reader
a vraiment beaucoup plus à lui, mais c'est la partie que je suis coincé sur. Merci beaucoup pour l'aide.
Mise à JOUR:
En utilisant le projet de Loi Oneal les commentaires, j'ai écrit
void alt_reader(ifstream &file, stringstream &str, int n){
char buffer[n+1];
file.read(buffer, n);
buffer[n] = 0;
str << buffer;
cout << "First Time: " << buffer << endl; //First Time: 123
}
int main() {
ifstream inFile;
stringstream strm;
int num;
inFile.open("num.txt");
alt_reader(inFile, strm, 3);
cout << "Second Time: " << num << endl; //Second Time: 123
}
Grâce. Toutes les critiques avec ce qui est là maintenant?
Vous devez vous connecter pour publier un commentaire.
La première fois que vous avez imprimé la variable, de l'imprimer comme un
char *
, l'impression de traiter le fichier en tant que fichier texte (Et vous avez de la chance vous n'avez pas de crash). Le deuxième temps de l'imprimer, vous réinterprété comme unint
, faisant de la représentation de complètement différent.Chaque fois que vous lancez des pointeurs d'un type vers un autre type que vous êtes généralement en invoquant un comportement indéfini. Depuis
char
n'a pas de norme concernantint
, vous l'avez ici.EDIT: pour répondre À votre question:
char buffer[n]; buffer[n] = 0;
. L'indice maximum d'un tableau de longueur n est n-1. Aussi: je suis surpris de voir que même compile parce que la matrice de déclarations doivent être constante.int header_length; infile.read( (char*)&header_length, sizeof(header_length)); if(byteswap_bool) EndianByteSwap(header_length);
et je suis juste essayer de condenser le lire et si les appels vers quelque chose de plus propre.Vous avez au moins deux problèmes ici.
Dans main():
alt_reader
, vous êtes plutôt du passage d'un int.'123'
mais qui veulent un int pour avoir la valeur de123
.Que vous pouvez faire:
Notez que j'ai ajouté
line[3]=0;
àalt_reader
etatoi
la conversion de chaîne de caractères (un scii) int.