2012-08-06 35 views
0
#include<stdio.h> 
#define STORAGESIZE 5 
#define MAX_NAME_LEN 2 

typedef struct{ 
     char name[MAX_NAME_LEN]; 
     char feild1; 
     char feild2; 
    } strt; 
    static strt storage[5]; 

main(){ 
unsigned char *stp=(unsigned char*)&strt; 
unsigned char*stp_end=(unsigned char*)(&strt+STORAGESIZE); 
int i; 

for(i=0;stp!=stp_end;stp++,i++) 
    printf("byte%d: %x\n",i,*stp); 

} 

我想確認聲明爲靜態的所有結構都將被初始化爲0,除了可能的填充部分。 statictable.c: 並試圖編譯上面時,我得到的錯誤
c預期表達式之前{aStructName}

In function 'main': 
statictable.c:13:38: error: expected expression before 'strt' 
statictable.c:14:42: error: expected expression before 'strt' 


什麼可能是錯誤的鑄造指針到另一個pointer.Although我知道這可能變成一個任務是最初級的。

+1

總是指定'main()'的返回類型('int'); C99(和C11)需要它。總的來說,最好從程序中返回一個值(0表示成功),儘管C99允許您省略它,然後返回零 - 但C89不允許您省略返回值。你不能雙方都有。 – 2012-08-06 04:52:55

回答

4

在行:

unsigned char *stp=(unsigned char*)&strt; 

你給指針strt這是一種類型,而不是一個變量。 IIT的像&int(無效以及:)),你可能shuold做:

unsigned char *stp=(unsigned char*)storage; 

而同爲下一行。

+0

你可能不需要數組名前面的&。第一行並不重要,但它確實在第二行! – 2012-08-06 04:54:26

+0

你是對的。固定。 – MByD 2012-08-06 05:49:15

1

在這兩條線:

unsigned char *stp=(unsigned char*)&strt; 
unsigned char*stp_end=(unsigned char*)(&strt+STORAGESIZE); 

你試圖採取的類型的地址:strt。您需要您的strt陣列的地址:storage

+0

可能不是數組的地址;只是數組的名稱。第一行並不重要,它在第二行很重要(很多)。 – 2012-08-06 04:54:49

相關問題