2

ここで、新しい C の質問をします。char 配列の配列があり、1 回の呼び出しでファイルに書き込めるようにメモリ内に連続してメモリを予約したいと考えています。

わかりました、それは私が持っているものです:

#define PACKET_SIZE 40960
#define BUFFER_SIZE 3950
#define N_BUFFERS 4

typedef struct buffer{
  int lock;
  char (*rxbuf)[BUFFER_SIZE][PACKET_SIZE];
}buffer;

/* Buffer list */
buffer bufferlist[N_BUFFER];

[...]

/* I use this to init structs */
void initializeData() {
  for (int i = 0; i < N_BUFFER; i++) {
    bufferlist[i].lock = 0;
    bufferlist[i].rxbuf = malloc(sizeof(???)); /* ??? <- I don't know what to put here */
  }
}

/* After I insert data */
for (int ibuffer = 0; ibuffer < N_BUFFER; ibuffer++) {
  for (int idata = 0; idata < BUFFER_SIZE; idata++) {
    /* Here I want to pass char array[PACKET_SIZE] */
    int bytes_received = insertData(bufferlist[ibuffer].rxbuf[idata], sizeof(bufferlist[ibuffer].rxbuf[idata]));
    [...]
  }
}

[...]

/* Then write with this */
fwrite(bufferlist[i].rxbuf, sizeof(????), 1, outfile);

このコードを教えてください。

前もって感謝します

4

3 に答える 3

1

char (*rxbuf)[BUFFER_SIZE][PACKET_SIZE];サイズが BUFFER_SIZE および PACKET_SIZE の 2D 配列への単一のポインターのみです。

連続したメモリが必要な場合は、2D 配列に変更できます

char rxbuf[BUFFER_SIZE][PACKET_SIZE];

または配列へのポインタへ

char (*rxbuff)[BUFFER_SIZE] ;
rxbuff = malloc( sizeof( char ) * BUFFER_SIZE * PACKET_SIZE ) ;

どちらの方法でも、配列は同じ方法でアクセスされますrxbuff[0][0] = 'a' ;

于 2013-12-19T12:39:11.347 に答える