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 所提到的,您应该乘以BUFFERa 的大小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

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

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

或者

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