1

C のポインターについて助けが必要です。ファイルから読み取り、構造体 rcftp_msg へのポインターで配列を埋める必要があります。今以来、私は次のことをしました:

struct rcftp_msg {

    uint8_t version;        
    uint8_t flags;              
    uint16_t len;       
    uint8_t buffer[512];    
};

struct rcftp_msg *windows [10];

pfile = fopen(file,"r"); // Open the file

I have to read from the file into the buffer, but I don't know how to do it.
I tried the next:

for (i = 0; i <10; i++){

leng=fread (**windows[i]->buffer**,sizeof(uint8_t),512,pfile);

} 

windows[i]->bufferが悪いと思います。

私の悪い英語でごめんなさい:(

4

2 に答える 2

0

問題は、rcftp_msg *windows [10];初期化していない、つまりメモリが割り当てられていないポインタの配列であるということです。

ポインタの1つにメモリを割り当てるには、を使用する必要がありますmalloc

そのようです:

windows[i] = malloc(sizeof(rcftp_msg));

配列内のポインターごとにこれを行います。

またfree()、完了したらメモリを再度解放するために使用します。

于 2012-12-19T11:01:50.837 に答える
0

astruct rcftp_msg *は aへのポインタstruct rcftp_msgであり、本物ではありません。したがって、実際のものにもメモリを割り当てる必要があります。最も簡単なのは、ポインターを使用しないことです。

struct rcftp_msg windows[10];
…
for (i = 0; i <10; i++){
    len = fread (&(windows[i].buffer), sizeof(uint8_t), RCFTP_BUFLEN, pfile);
}

または、使用する前にメモリを割り当てます。

struct rcftp_msg *windows[10];
…
for (i = 0; i <10; i++){
    windows[i] = malloc(sizeof(uint8_t) * RCFTP_BUFLEN);
    leng = fread(windows[i]->buffer, sizeof(uint8_t), RCFTP_BUFLEN, pfile);
}

また、次のことを確認して512 >= sizeof(uint8_t) * RCFTP_BUFLEN)ください。

于 2012-12-19T11:04:53.053 に答える