有人可以帮我解决以下错误。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
有人可以帮我解决以下错误。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
如果您只想要一个指向数组的指针,请使用
unsigned char * buf = tmp;
顺便说一句,您声明的方式tmp
使其成为可变长度数组(VLA)。从技术上讲,这些在 C++ 中是不允许的,尽管许多编译器支持 VLA 作为扩展。
问题不是len
。问题是您试图获取数组的地址,而不是数组第一个元素的地址;类型根本不匹配。
反而:
unsigned char* buf = &tmp[0];
此外,数组名称方便地(FSVO“方便地”)衰减为&tmp[0]
反正,所以你可以简单地写:
unsigned char* buf = tmp;
此外,您目前没有对数组的维度使用常量值 - 确保使用常量值进行len
制作const
和初始化。在 C++11 中,最好constexpr
确保您不会意外尝试使用 GCC VLA 。