2013-07-10 52 views
5

Tôi đang viết một chương trình C++ đọc một tệp và sau đó gửi nó đến một lớp khác dưới dạng một mảng ký tự. Bởi vì các mảng ký tự chỉ được truyền qua con trỏ, tất cả kích thước bị mất.Tệp văn bản chuẩn NULL có bị chấm dứt không?

Tệp mà nó sẽ đọc sẽ là tệp văn bản. Các tệp văn bản có bị chấm dứt không?

Tốt hơn là tôi không muốn sử dụng Vector vì tôi thực sự không cần bất kỳ tính năng nào của nó nhưng kích thước của mảng.

+1

Không, tập tin văn bản không được 'NULL' chấm dứt. Hoặc bạn có thể nối thêm (theo hàm/phương thức đọc từ tệp) trong bộ đệm hoặc duy trì một biến khác để giữ độ dài – VoidPointer

+0

@VoidPointer Tham số chiều dài. –

+0

Có liên quan: https://latedev.wordpress.com/2012/12/04/all-about-eof/ – delnan

Trả lời

8

No.
Tệp có độ dài đã biết, vì vậy chúng không cần bất kỳ byte terminator nào.

+0

Cảm ơn câu trả lời. Tôi nghĩ rằng tôi sẽ gửi một int để xác định độ dài của mảng. –

4

không có tệp văn bản nào không bị NULL chấm dứt. Bạn cần kiểm tra EOF (End Of File) Tôi nghĩ rằng

cin.eof() 

là những gì bạn đang tìm kiếm. Nó trả về true nếu kết thúc tập tin là đạt được.

+0

Nhưng ** không ** làm điều đó trong điều kiện vòng lặp. Cờ 'eof' không được đặt cho đến khi hoạt động đọc thất bại do EOF, vì vậy nếu bạn kiểm tra' eof' trong điều kiện vòng lặp thì bạn sẽ lặp lại một lần cho nhiều. –

1

Không, chúng không có. Nhưng nhiều chức năng C/C++ để đọc các chuỗi từ các tệp nối thêm 0 vào dữ liệu trả về.

-1

sử dụng eof hơn là việc tìm kiếm ký tự null ... ví dụ:

#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

Không bao giờ sử dụng eof() trong điều kiện vòng lặp. –

Các vấn đề liên quan