有人能帮我解决下面的错误吗?在我尝试通过buf之前,我应该强制转换len吗
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发布于 2012-12-13 19:55:30
如果只想要一个指向数组的指针,请使用
unsigned char * buf = tmp;顺便说一下,声明tmp的方式使它成为一个variable-length array (VLA)。从技术上讲,these are not allowed in C++,尽管许多编译器支持VLA作为扩展。
发布于 2012-12-13 19:59:21
问题不在len。问题是您试图获取数组的地址,而不是数组第一个元素的地址;类型根本不匹配。
而是:
unsigned char* buf = &tmp[0];而且,数组名称可以方便地(FSVO“方便地”)衰减到&tmp[0],所以您可以简单地编写:
unsigned char* buf = tmp;此外,您目前没有使用常量值作为数组的维数-请确保将len设为const,并使用常量值进行初始化。在C++11中,最好是constexpr,这样才能真正确保您不会意外地尝试使用GCC VLA。
https://stackoverflow.com/questions/13859259
复制相似问题