将带有int的unsigned char数组转换为unsigned char

时间:2012-12-13 11:52:27

标签: c++

有人可以帮助我解决以下错误。在我尝试通过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

2 个答案:

答案 0 :(得分:3)

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

unsigned char * buf = tmp;

顺便说一句,你声明tmp的方式使它成为variable-length array(VLA)。从技术上讲,these are not allowed in C++,尽管许多编译器支持VLA作为扩展。

答案 1 :(得分:2)

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

相反:

unsigned char* buf = &tmp[0];

此外,数组名称方便(FSVO“方便”)无论如何衰减到&tmp[0],所以你可以写简单:

unsigned char* buf = tmp;

此外,您目前没有为数组的维度使用常量值 - 确保len成为const并使用常量值初始化。在C ++ 11中,最好<{1}} 确保您不会意外地尝试使用GCC VLA。