C++中对结构体中的字符数组赋值的问题

结构体的如下structstu{charversion[2];charst;charex[2];charlen[2];};我现在生成一个对象astructstua;然后对... 结构体的如下
struct stu
{
char version[2];
char st;
char ex[2];
char len[2];
};
我现在生成一个对象a
struct stu a;
然后对a初始化,现在的问题是
a.version[2]={0x00,0x01};对结构体中的字符型数组初始化出现了错误。编译器提示的错误还是说不应该是用大括号,但是我记得数组可以这样初始化的啊,而且我后来试过不在结构体中的数组这样初始化完全没问题。所以我比较迷茫。我试过将大括号改为圆括号 编译不报错 但是数组初始化后的数据乱七八糟的,迷茫。。。求高手指教啊。
展开
 我来答
1984zhangyuhua
推荐于2016-10-16 · TA获得超过1092个赞
知道小有建树答主
回答量:164
采纳率:50%
帮助的人:149万
展开全部
首先,你这个不是初始化的问题,a.version[2]={0x00,0x01}是数组越界的问题,version的下标只能取0和1。
另外关于初始化的问题,数组也不能这样初始化啊,数组在定义的时候可以初始化,如果不在定义的时候初始化,后面就只能挨个初始化。
比如int a[2] = {1,2};可以
但是int b[2];b[]={1,2};不行,int b[2];b ={1,2}也不行。
如果你要给结构体一起赋值的时候必须这样
struct stu a = {{'a','b'},'c',{'d','e'},{'f','g'}};
gqgq0311
2010-05-19 · TA获得超过768个赞
知道小有建树答主
回答量:563
采纳率:100%
帮助的人:269万
展开全部
呵呵 你如果要初始化就只能这样
struct stu a;
a.version[0]=0x00;
a.version[1]=0x01;
这样就好了
如果你改成小括号了 那么就代表一个逗号表达式 让a.version[2]等于这个式子也就是0x01 但数组是从下表0开始的 你越界了并且也没有初始化 所以你看到的是垃圾的数值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zwhfly
2010-05-22 · TA获得超过123个赞
知道答主
回答量:77
采纳率:0%
帮助的人:48.9万
展开全部
a.version[2]={0x00,0x01};
你让编译器怎么解释呢?
显然只能解释为给a中数组成员version的第三个数赋值(编译器不会检查下标溢出),而把{0x00,0x01}赋给一个char是解释不通的。若改为(0x00,0x01)则编译器会解释为逗号表达式,逗号表达式的值为最左边的表达式的值,即将0x00赋给a.version[2],而这本身就是极不安全、极不优雅的风格(下标溢出)。

若想初始化结构体,只能这样:
struct stu a = {0x00,0x01};
只不过这样会把a的其他元素全部置零,在不考虑效率优化的情况下,效果是完全可以接受的(非要效率极致优化的话用struct stu a;a.version[0]=0x00;a.version[1]=0x01;最佳)

更正:逗号表达式的值是最右边的表达式的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Ritzberry
2010-05-19 · TA获得超过453个赞
知道小有建树答主
回答量:330
采纳率:0%
帮助的人:405万
展开全部
只能在定义的时候初始化
struct stu a={....};
不能单独再用.

当然你可以期待更好支持0x的编译器出现
至少VC2010里的cl编译器还不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友62f77b6
2010-05-19 · 超过24用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:0
展开全部
你那已经不是初始化了,是赋值了,所以会出错,数组不能那样赋值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式