2013-07-10 12 views
5

Sto scrivendo un programma C++ che legge un file e poi lo invia ad un'altra classe come array di caratteri. Poiché gli array di caratteri vengono passati solo dal puntatore, tutte le dimensioni vengono perse.I file di testo standard sono terminati con NULL?

Il file che verrà letto sarà un file di testo. I file di testo sono nulli terminati?

Preferibilmente non voglio usare un vettore poiché non ho davvero bisogno di nessuna delle sue caratteristiche, ma della dimensione dell'array.

+1

No, i file di testo non sono 'null' terminati. O è possibile aggiungere (tramite la funzione/metodo che legge dal file) nel buffer o mantenere un'altra variabile per contenere la lunghezza – VoidPointer

+0

@VoidPointer Length Parameter it is. –

+0

Pertinente: https://latedev.wordpress.com/2012/12/04/all-about-eof/ – delnan

risposta

8

No.
I file hanno una lunghezza nota, quindi non è necessario alcun byte di terminazione.

+0

Grazie per la risposta. Penso che manderò un int per specificare la lunghezza dell'array. –

4

nessun file di testo non è terminato NULL. È necessario verificare la presenza di EOF (End Of File) Penso

cin.eof() 

è quello che stai cercando. Restituisce true se viene raggiunta la fine del file.

+0

Ma ** non farlo in una condizione di loop. Il flag 'eof' non è impostato fino a quando un'operazione di lettura non riesce a causa di EOF, quindi se si controlla' eof' in una condizione di ciclo, si effettuerà un ciclo su molti. –

1

No, non lo sono. Ma molte funzioni di C/C++ per leggere le stringhe dai file accodano la terminazione zero ai dati restituiti.

-1

uso EOF piuttosto che trovare carattere null ... ad esempio:

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
ifstream iFile("myfile.txt"); // myfile.txt has integers, one per line 
while (!iFile.eof()) 
{ 
int x; 
iFile >> x; 
cerr << x << endl; 
} 
return 0; 
} 
+1

Non utilizzare mai eof() in una condizione di loop. –

Problemi correlati