1

次のコード行についてサポートが必要です。私はCでコードを書いていますが、Javaで次のコード行を置き換える必要があります。だから私を助けて、Cコード用にそれを変更する方法についていくつかの代替案を提案してください。コードの行を待っています。ありがとう..

byte[] receiverByte = new byte[BUFFER];
4

4 に答える 4

2
byte[] receiverByte = new byte[BUFFER_SIZE ];

C ++コンパイラを使用している場合は、次のようになります。

char* receiverByte = new char[BUFFER_SIZE ];

他のC言語:

char* receiverByte = malloc( BUFFER_SIZE );

ただし、CはJavaのようにメモリ管理されていないため、完了したらdeleteを呼び出してメモリを解放する必要があります。

したがって、C ++の場合:

delete[] receiverByte;

そしてCの場合:

free( receiverByte );

また、スタック上に固定サイズの配列を作成することもできます。サイズBUFFER_SIZEはコンパイル時に指定する必要があり、ベクトルサイズは変更または拡大できません。

char receiverByte[BUFFER_SIZE];

編集:C ++コンパイラを使用している場合は、STLライブラリにもアクセスできるため、new[]とdelete[]を直接使用する必要がありません。

#include <vector>
...
std::vector<char> receiverByte;
receiverByte.resize( BUFFER_SIZE );
于 2013-02-27T08:41:49.633 に答える
2

BUFFERがマクロとして定義されている場合:

#define BUFFER 1234
unsigned char receiveBuffer[BUFFER];

または、動的割り当てを使用しmalloc()ます。

#include <stdlib.h>
unsigned char *receiveBuffer = malloc(BUFFER);

@mic_eで述べたように、プラットフォームに依存しないようにするにBUFFERは、aのサイズを掛ける必要があります。2番目の例は次のようになります。unsigned char

unsigned char *receiveBuffer = malloc(BUFFER * sizeof(unsigned char));

同じことが最初の例にも当てはまります。

于 2013-02-27T08:43:24.623 に答える
0
unsigned char receiverByte[BUFFER];

また

unsigned char* receiverByte = malloc(BUFFER);
if (!receiverByte ) my_do_with_error(....);

と:

double data[19][4];

ただし、ここでの動的配列はより注意が必要です(NULLのテスト)

int M= 19, N= 4;
double **data   =malloc(sizeof( *data)*M);
         data[0]=malloc(sizeof(**data)*M*N);
for(int i=1; i<M; ++i) data[i] =data[0]+i*N;

....。

free(data[0]);
free(data);

編集:C標準の6.5.3.4で私達は見つけることができます

#include <stddef.h>
size_t fsize3(int n)
{
  char b[n+3];     // variable length array
  return sizeof b; // execution time sizeof
}
int main()
{
  size_t size;
  size = fsize3(10); // fsize3 returns 13
  return 0;
}
于 2013-02-27T08:45:01.893 に答える
0

Cのバイトに似ているため、使用することをお勧めしますunsigned char*。したがって、次のようになります。

unsigned char* receiverByte = malloc(BUFFER * sizeof(unsigned char));

また

unsigned char receiverByte[BUFFER];
于 2013-02-27T08:45:46.903 に答える