2012-12-06 48 views
-1

任何人都可以解釋爲什麼這個代碼不會編譯?從字符緩衝區中鑄造對象c

的main.c

typedef struct ext2_group_desc 
{ 
    unsigned long bg_block_bitmap; /* Blocks bitmap block */ 
    unsigned long bg_inode_bitmap; /* Inodes bitmap block */ 
    unsigned long bg_inode_table;  /* Inodes table block */ 
    unsigned int bg_free_blocks_count; /* Free blocks count */ 
    unsigned int bg_free_inodes_count; /* Free inodes count */ 
    unsigned int bg_used_dirs_count; /* Directories count */ 
    unsigned int bg_pad; 
    unsigned long bg_reserved[3]; 
} group_desc; 

int main() { 
    char buf[1024]; 
    group_desc gd; 

    gd = (group_desc) buf; 

    return(0); 
} 

終端

$ bcc -ansi -c test.c 
test.c:7.26: error: need scalar or pointer or void 
test.c:7.26: error: assignment to/from struct/union of a different type 
$ 
+0

這應該做什麼?什麼是'ext2_group_desc'。你的代碼試圖告訴編譯器,*將字符數組與「ext2_group_desc」*相同,你認爲它是真的嗎? –

+0

在我的實際代碼中,我讀了一個硬盤驅動器塊到這個'char buf'中,然後嘗試將它轉換爲組描述符結構(不是1024字節)。 –

回答

4

你缺少了一些ext2_group_desc定義(也許在某些包含文件?)。我猜測這是一些struct。然後,如果你想在內存buf複製到gd結構可能會編寫

gd = *(ext2_group_desc*) buf; 

請閱讀一本關於C編程的好書。學習C需要很多天的工作。

還啓用編譯器中的所有警告。

+0

這也行不通,我可以使用它作爲指針'(ext2_group_desc *)buf',但問題是爲什麼不能編譯。我知道它已經壞了,這個網站的目標是告訴我爲什麼。我添加了提供的struct,抱歉,我認爲「知道C」的人會認爲它是一個結構體。 –

+0

閱讀一些很好的C編程書籍。 –

+0

你能告訴我爲什麼這個問題很模糊嗎?用英語來說,似乎很合理的問爲什麼這不能編譯......也許我讀過一本書,現在我正在嘗試一些東西,但我已經達到了一個點,不知道爲什麼它不起作用。 –