2012-01-15 29 views
7

mới đến tập tin trong C, cố gắng để đọc một tập tin qua freadChức năng fread không chấm dứt chuỗi bởi 0

Dưới đây là nội dung của các file:

line1 how 

Mã sử ​​dụng:

char c[6]; 
fread(c,1,5,f1) 

Khi xuất ra var 'c', nội dung xuất hiện với một ký tự ngẫu nhiên ở cuối (ví dụ: line1 *)

Does f đọc không chấm dứt chuỗi hoặc tôi thiếu một cái gì đó?

+1

'fread' chỉ đọc byte thành bộ đệm. nó không biết gì về những gì bạn gọi là một chuỗi. –

Trả lời

10

No. Chức năng fread chỉ cần đọc một số phần tử, nó không có khái niệm về "chuỗi".

  • Bạn có thể thêm terminator NUL mình
  • Bạn có thể sử dụng fgets/fscanf thay

Cá nhân tôi sẽ đi với fgets.

+0

cho những người quan tâm, một ví dụ thực hiện để loại bỏ dòng mới từ fgets được đưa ra ở đây: http://stackoverflow.com/questions/2693776/removing-trailing-newline-character-from-fgets-input –

2

man page for fread không nói gì về việc thêm số không kết thúc ở cuối tệp.

Nếu bạn muốn an toàn, hãy khởi tạo tất cả các byte trong mảng c của bạn bằng không (thông qua bzero hoặc một cái gì đó tương tự) và khi bạn đọc, bạn sẽ có một kết thúc null.

Tôi đã liên kết hai trang của người đàn ông cho freadbzero và tôi hy vọng sẽ giúp bạn.

1

Xin lỗi, tôi đến muộn một chút.

Không, fread không xử lý việc này cho bạn. Nó phải được thực hiện bằng tay. May mắn là không khó. Tôi thích sử dụng fread() 's trở lại để thiết lập NUL như vậy:

char buffer[16+1]; /*leaving room for '\0' */ 
x = fread(buffer, sizeof(char), 16, stream); 
buffer[x]='\0'; 

và bây giờ bạn có cho mình một \ 0 chấm dứt chuỗi, và như một phần thưởng, chúng tôi có một biến x tiện lợi, mà thực sự tiết kiệm cho chúng tôi những rắc rối khi chạy strlen() nếu chúng ta cần nó sau này. khéo léo!