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