cuốn sách gpt4 ai đã làm

EOF trước EOF trong Visual Studio

In lại Tác giả: Walker 123 Thời gian cập nhật: 27-11-2023 23:28:53 28 4
mua khóa gpt4 Nike

Tôi có đoạn mã này trong một chương trình (trong Visual Studio 2005):

if(_eof(fp->_file))
{
phá vỡ;
}

Khi đạt tới eof, nó sẽ phá vỡ vòng khép kín. Nhưng chương trình không thể phân tích được vài nghìn ký tự cuối cùng trong tệp. Vì vậy, để tìm hiểu chuyện gì đang xảy ra, tôi đã làm điều này:

if(_eof(fp->_file))
{
cout<<><>
phá vỡ;
}

Bây giờ câu trả lời tôi nhận được từ ftell khác (và nhỏ hơn) so với kích thước tệp thực tế (điều này không nằm ngoài dự kiến). Tôi nghĩ Windows có thể có vấn đề với tệp nên tôi đã làm như sau:

if(_eof(fp->_file))
{
cout<<><>
fseek(fp, 0, SEEK_END);
cout<<><>
phá vỡ;
}

Chà, fseek() đã đưa ra câu trả lời đúng (bằng kích thước tệp) và ftell() ban đầu không thành công (như đã đề cập).

Bất cứ ý tưởng những gì có thể xảy ra ở đây?

biên tập:Tệp được mở ở chế độ "rb".

câu trả lời hay nhất

Bạn không thể sử dụng một cách đáng tin cậy _eof()từ TÀI LIỆU* trên bộ mô tả tập tin thu được vì TÀI LIỆU*Luồng được đệm. điều này có nghĩa fphútfp->_fileLàm khô và lưu trữ các byte còn lại vào bộ đệm bên trong của nó. cuối cùngfp->_fileở vị trí eof, trong khifpVẫn còn byte để bạn đọc. sử dụng feof() hiện hữu Sau thao tác đọc, hãy xác định xem bạn có ở cuối tệp hay không, nếu bạn trộn các cặp TÀI LIỆU* Các hàm hoạt động trên bộ mô tả tệp số nguyên, hãy cẩn thận với các hàm hoạt động trên bộ mô tả tệp số nguyên.

Về EOF trước EOF trong c++ - Visual Studio, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/7282127/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress