首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将带int的unsigned char数组转换为unsigned char

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

Stack Overflow用户
提问于 2012-12-13 19:52:27
回答 2查看 1.5K关注 0票数 0

有人能帮我解决下面的错误吗?在我尝试通过buf之前,我应该强制转换len

代码语言:javascript
复制
int len=2;
unsigned char tmp[len + 1];
unsigned char * buf = &tmp;

错误是:

代码语言:javascript
复制
error: cannot convert 'unsigned char (*)[(((unsigned int)((int)len)) + 1)]' to 'unsigned char*' in assignment
EN

回答 2

Stack Overflow用户

发布于 2012-12-13 19:55:30

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

代码语言:javascript
复制
unsigned char * buf = tmp;

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

票数 3
EN

Stack Overflow用户

发布于 2012-12-13 19:59:21

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

而是:

代码语言:javascript
复制
unsigned char* buf = &tmp[0];

而且,数组名称可以方便地(FSVO“方便地”)衰减到&tmp[0],所以您可以简单地编写:

代码语言:javascript
复制
unsigned char* buf = tmp;

此外,您目前没有使用常量值作为数组的维数-请确保将len设为const,并使用常量值进行初始化。在C++11中,最好是constexpr,这样才能真正确保您不会意外地尝试使用GCC VLA。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13859259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档