我正在研究旨在爲類創建文件系統的簡單版本的項目。當我使用我們定義的「inode」結構時,我遇到了麻煩。 inode的結構定義如下:將緩衝區寫入結構似乎不起作用
struct iNode
{
char name[8]; //file name
int size; // file size
int blockPointers[8]; // direct block pointers
int used; // 0 if free; 1 if in use
};
我也有下面的代碼後來在我的項目:
char* inodes = NULL;
inodes = new char[48];
iNode *myinode = new iNode();
int inodemax = 16;
int storedi = 0;
int x = 0;
while(x < inodemax){
disk.seekg(128 + 48*x,ios::beg);
disk.read(inodes, 48);
inodex = (struct iNode *) &inodes;
if(inodex -> used == 0){
inodex -> used = 1;
for(int i = 0; i < 8; i++){
inodex -> name[i] = name[i];
}
inodex -> size = size;
storedi = disk.tellg();
break;
}
if(inodex -> used != 0 && x == 15){
return 4;
}
x = x +1;
}
我不能很好地在C精通++所以任何明顯的錯誤可能會犧牲我在語言方面的有限知識(我對C有更好的體驗)。我的問題伴隨着這樣一個事實,即我創建了一個測試用例,其中inodes used字段應該爲0,但返回「4」的返回語句。它不應該達到這部分代碼。
當我手動更改我的代碼以從inode緩衝區獲取「used」字段時,它可以正常工作。所以我導致我相信我在將我的char *緩衝區複製到我的結構中時出錯。
任何人都可以指出我在做什麼錯了,我該如何解決它?我一直堅持這一段時間,謝謝。
請給出[MCVE。沒有這些,我們就沒有完整的背景,也不能合理地期望調試問題。 – kaylum
你不應該使用'48'的魔法值;改爲使用'sizeof(iNode)'。 –
@kaylum這是我目前面臨困難的唯一部分。缺少什麼「背景」? –