2013-10-05 100 views
1
#include <stdio.h> 

struct struct_type 
{ 
    int d; 
}; 

int main() 
{ 

    struct struct_type *cust; 

    cust->d=13; 

    FILE* fp; 

    fp = fopen("path to file", "wb+"); 

    or, 

    fp = fopen("path to file", "w+");  

    fwrite(cust, sizeof(struct struct_type), 1, fp); 

    fclose(fp); 

    return 0; 

} 

預計輸出FWRITE寫入垃圾值到文件

寫入文件但是越來越垃圾的價值。

回答

5

假設你已經分配的內存爲cust,或者使用普通的結構,而不是一個指針,你會得到一個包含INT 13的平臺上二進制表示的文件。比如說,記事本中的內容不可讀。

如果您查看十六進制編輯器中的輸出,您會看到一些零字節和一個0xOD - 零字節數取決於您平臺上整數的大小,以及它們是在之前還是之後13字節取決於其字節順序。

如果您想要一個文件名爲13的文件,請使用fprintf

(因爲我們還沒有分配的內存,你的程序有不確定的行爲,並可以在所有做任何事情。)


修復與堆棧結構:

#include <stdio.h> 

struct struct_type 
{ 
    int d; 
}; 

int main() 
{ 
    struct struct_type cust; 
    cust.d=13; 

    FILE* fp; 
    fp = fopen("path_to_file", "wb+"); 
    fwrite(&cust, sizeof(cust), 1, fp); 
    fclose(fp); 

    return 0; 
} 
$ gcc -Wall -std=c99 -pedantic t.c 
$ ./a.out 
$ hexdump -C path_to_file 
00000000 0d 00 00 00          |....| 
00000004 

要取代文本文件,請將fwrite替換爲:

fprintf(fp, "%d", cust.d); // or "%d\nd"; 

將「b」從開放模式中刪除,因爲這是針對二進制I/O的。

2

分配menory您結構指針cust

fwrite(cust, sizeof(struct struct_type), 1, fp);

寫入二進制數據轉換成文件。

存在的數據是二進制數據,即非垃圾。

如果你想看看它是否正確寫入或不讀入對象並打印。

使用fread()

其他明智的整型轉換爲字符串,並寫入到一個文本文件中。

然後,你可以看到13

+1

是由於這樣的話,但數據是相同的我是否使用W +或WB + +1的答案 – user1502952

+0

'w'模式截斷文件長度爲零,或者創建文本文件寫作。 'wb'模式截斷文件爲零長度或創建二進制文件進行寫入。字符'b'不起作用,但允許符合ISO C標準。見[fopen](http://pubs.opengroup.org/onlinepubs/009695399/functions/fopen.html)和[這裏也是](http://www.manpagez.com/man/3/fopen/) – Gangadhar