0

有人可以帮我解决以下错误。len在我尝试通过之前我应该​​施放buf吗?

int len=2;
unsigned char tmp[len + 1];
unsigned char * buf = &tmp;

错误是:

error: cannot convert 'unsigned char (*)[(((unsigned int)((int)len)) + 1)]' to 'unsigned char*' in assignment
4

2 回答 2

3

如果您只想要一个指向数组的指针,请使用

unsigned char * buf = tmp;

顺便说一句,您声明的方式tmp使其成为可变长度数组(VLA)。从技术上讲,这些在 C++ 中是不允许的,尽管许多编译器支持 VLA 作为扩展。

于 2012-12-13T11:55:30.250 回答
2

问题不是len。问题是您试图获取数组的地址,而不是数组第一个元素的地址;类型根本不匹配。

反而:

unsigned char* buf = &tmp[0];

此外,数组名称方便地(FSVO“方便地”)衰减为&tmp[0]反正,所以你可以简单地写:

unsigned char* buf = tmp;

此外,您目前没有对数组的维度使用常量值 - 确保使用常量值进行len制作const和初始化。在 C++11 中,最好constexpr确保您不会意外尝试使用 GCC VLA

于 2012-12-13T11:59:21.163 回答