簡體   English   中英

byte [] receiverByte = new byte [BUFFER];

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

我需要以下代碼行的幫助。 我在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所提到的,你應該將BUFFERunsigned 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;
}

我建議使用unsigned char*因為它類似於C中的一個字節。所以它將是:

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

要么

unsigned char receiverByte[BUFFER];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM