重要編輯:閱讀和寫作結構[C]
對不起,大家,我犯了一個大錯誤的結構。 char * name;意思是在結構之外,寫在結構之後的文件中。 這樣,你讀取結構,找出名字的大小,然後讀入字符串。也解釋了爲什麼不需要空終止符。 但是,我覺得某處,我的實際問題已得到解答。如果有人想編輯他們的回覆,所以我可以選擇一個最合適的,我會很感激。
同樣,我所問的問題是「如果你閱讀了一個結構體,你還閱讀它所保存的數據,或者你需要以其他方式訪問它」。
很抱歉的混亂
對於分配,我一直在負責其寫入和讀取結構的盤(使用的fread和fwrite)中的程序。
我很難理解這個概念。 比方說我們有這樣的結構:
typedef struct {
short nameLength;
char* name;
}attendenceList;
attendenceList names;
現在假設我們給它這樣的數據:
names.name = "John Doe\0";
names.nameLength = strlen(names.name); /*potentially -1?*/
,然後我們使用fwrite的...給出一個文件指針fp。
fwrite(&names,sizeof(names),1,fp);
現在我們關閉文件,稍後打開它來閱讀結構。 問題是這樣的:當我們在結構中讀取時,我們是否還讀取了它存儲的變量?
我們能那麼現在這樣做:
if(names.nameLength < 10)
{
...
}
還是我們必須FREAD的東西,不只是結構,或以某種方式進行分配? 假設FREAD是:
fread(&names,sizeof(names),1,fp);
而且假設我們定義了在我國目前的功能結構,如上所述。
感謝您的幫助!
一對夫婦的評論:' 「李四」'已經有了'e'後0,這樣你就不需要寫' 「李四\ 0」'。其次,'strlen'返回'size_t',它是一個無符號類型。因此,它不能返回負值。當你把'strlen'的返回值賦給'short'時,如果這個值在'short'的範圍內,那麼一切都沒問題。否則,你會溢出。 – 2010-03-04 20:52:14
你編輯的答案是,如果你用'fwrite'寫了一個'struct',然後用'fread'讀回,你會得到它,但是如果'struct'有指針,你會得到值的指針返回,這在閱讀時可能沒有意義。如果你的struct只有一個'short'元素,我不知道你爲什麼不能寫'short'本身,而不是將它包裝在'struct'中。也許你實際的'struct'有更多的數據呢?只要沒有指針參與'struct',你就沒問題。當然,編寫二進制數據不能跨不同的機器移植。 – 2010-03-04 21:02:00
實際的結構體包含兩個字符串的大小(在結構之後,因此您可以正確使用fseek或知道如何讀取它們),並且該程序連續使用兩次。 – Blackbinary 2010-03-04 21:23:45