次のコード行についてサポートが必要です。私はCでコードを書いていますが、Javaで次のコード行を置き換える必要があります。だから私を助けて、Cコード用にそれを変更する方法についていくつかの代替案を提案してください。コードの行を待っています。ありがとう..
byte[] receiverByte = new byte[BUFFER];
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 );
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));
同じことが最初の例にも当てはまります。
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;
}
Cのバイトに似ているため、使用することをお勧めしますunsigned char*
。したがって、次のようになります。
unsigned char* receiverByte = malloc(BUFFER * sizeof(unsigned char));
また
unsigned char receiverByte[BUFFER];