byte [] receiverByte = new byte [BUFFER];

时间:2013-02-27 08:40:40

标签: java c

我需要以下代码行的帮助。我在C中编写代码,我需要替换Java中的以下代码行。 所以,请帮助我,并提出一些替代方案,我可以为我的C代码修改它。我正在等待代码行。 谢谢..

byte[] receiverByte = new byte[BUFFER];

4 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:2)

如果将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));

第一个例子也是如此。

答案 2 :(得分: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);

编辑:In 6.5.3.4 of the C standard we can find

#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;
}

答案 3 :(得分:0)

我建议使用unsigned char*,因为它类似于C中的一个字节。所以它将是:

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

unsigned char receiverByte[BUFFER];