2011-07-01 32 views
11

Tôi đã cố viết một số nguyên vào một tệp (chế độ mở là w). fprintf đã viết nó một cách chính xác nhưng fwrite viết vô nghia:cách viết một số nguyên vào một tệp (sự khác biệt giữa fprintf và fwrite)

int length; 
char * word = "word"; 

counter = strlen(word); 
fwrite(&length, sizeof(int), 1, file); 
fwrite(word, sizeof(char), length, file); 

và kết quả trong file là:

từ

nhưng nếu tôi sử dụng fprintf thay vào đó, như thế này:

int length; 
char * word = "word"; 

counter = strlen(firstWord); 
fprintf(file, "%d", counter); 
fwrite(word, sizeof(char), length, file); 

Tôi nhận được kết quả này trong tệp:

4word

ai có thể cho những gì tôi đã làm sai? cảm ơn!

cập nhật: Cuối cùng tôi muốn thay đổi văn bản thành nhị phân (tôi sẽ mở tệp ở chế độ wb), sẽ có sự khác biệt trong triển khai của tôi không?

+2

chiều dài không được khởi tạo. –

+0

@omrib: Anh ta có thể thích viết rác vào các tệp;) –

Trả lời

19

fprintf viết một chuỗi. fwrite ghi byte. Vì vậy, trong trường hợp đầu tiên của bạn, bạn đang viết các byte đại diện cho một số nguyên cho tập tin; nếu giá trị của nó là "4", bốn byte sẽ nằm trong phạm vi ASCII không thể in được, do đó bạn sẽ không thấy chúng trong trình chỉnh sửa văn bản. Nhưng nếu bạn nhìn vào kích thước của tập tin, nó có thể sẽ là 8, không phải 4 byte.

+1

vì vậy nếu tôi muốn viết một số nguyên trong chế độ nhị phân, tôi nên sử dụng fwrite, nhưng nếu tôi viết vào tệp văn bản, tôi nên sử dụng fprintf? –

+3

@hershalle: vâng. – vanza

+0

cảm ơn! bạn rất hữu ích –

1

Sử dụng printf() chuyển đổi số nguyên thành một chuỗi ký tự, trong trường hợp này là "4". Sử dụng fwrite() làm cho các byte thực tế bao gồm giá trị số nguyên được ghi, trong trường hợp này, 4 byte cho các ký tự 'w', 'o', 'r','d'.

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