2013-07-10 11 views
5

Piszę program w C++, który odczytuje plik, a następnie wysyła go do innej klasy jako tablicy znaków. Ponieważ tablice znaków są przekazywane tylko przez wskaźnik, cały rozmiar jest tracony.Czy standardowe pliki tekstowe są zakończone NULL?

Plik, który będzie czytać, będzie plikiem tekstowym. Czy pliki tekstowe mają wartość zerową?

Najlepiej nie chcę używać Vectora, ponieważ naprawdę nie potrzebuję żadnej z jego funkcji, ale rozmiaru tablicy.

+1

Nie, pliki tekstowe nie są 'NULL' zakończone. Możesz dodać (przez funkcję/metodę, która czyta z pliku) w buforze lub utrzymywać inną zmienną do przechowywania długości – VoidPointer

+0

@VoidPointer Długość Parametr jest. –

+0

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

Odpowiedz

8

Nr
Pliki mają znaną długość, więc nie potrzebują żadnego bajtu terminatora.

+0

Dzięki za odpowiedź. Myślę, że po prostu wyślę int, aby określić długość tablicy. –

4

żadne pliki tekstowe nie mają wartości NULL zakończone. Trzeba sprawdzić na EOF (koniec pliku) myślę

cin.eof() 

to, czego szukasz. Zwraca true, jeśli osiągnięty zostanie koniec pliku.

+0

Ale ** nie ** rób tego w pętli warunku. Flaga 'eof' nie jest ustawiona, dopóki operacja odczytu nie powiedzie się z powodu EOF, więc jeśli zaznaczysz' eof' w stanie pętli, to pętla zostanie wykonana od razu do wielu. –

1

Nie, nie są. Ale wiele funkcji C/C++ do odczytywania ciągów z plików dołącza zerowanie do zwróconych danych.

-1

użycie EOF raczej niż znalezienie znak null ... na przykład:

#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

Nigdy nie używaj eof() w stanie pętli. –

Powiązane problemy