2012-08-06 81 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