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};对结构体中的字符型数组初始化出现了错误。编译器提示的错误还是说不应该是用大括号,但是我记得数组可以这样初始化的啊,而且我后来试过不在结构体中的数组这样初始化完全没问题。所以我比较迷茫。我试过将大括号改为圆括号 编译不报错 但是数组初始化后的数据乱七八糟的,迷茫。。。求高手指教啊。 展开
struct stu
{
char version[2];
char st;
char ex[2];
char len[2];
};
我现在生成一个对象a
struct stu a;
然后对a初始化,现在的问题是
a.version[2]={0x00,0x01};对结构体中的字符型数组初始化出现了错误。编译器提示的错误还是说不应该是用大括号,但是我记得数组可以这样初始化的啊,而且我后来试过不在结构体中的数组这样初始化完全没问题。所以我比较迷茫。我试过将大括号改为圆括号 编译不报错 但是数组初始化后的数据乱七八糟的,迷茫。。。求高手指教啊。 展开
5个回答
展开全部
首先,你这个不是初始化的问题,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'}};
另外关于初始化的问题,数组也不能这样初始化啊,数组在定义的时候可以初始化,如果不在定义的时候初始化,后面就只能挨个初始化。
比如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'}};
展开全部
呵呵 你如果要初始化就只能这样
struct stu a;
a.version[0]=0x00;
a.version[1]=0x01;
这样就好了
如果你改成小括号了 那么就代表一个逗号表达式 让a.version[2]等于这个式子也就是0x01 但数组是从下表0开始的 你越界了并且也没有初始化 所以你看到的是垃圾的数值
struct stu a;
a.version[0]=0x00;
a.version[1]=0x01;
这样就好了
如果你改成小括号了 那么就代表一个逗号表达式 让a.version[2]等于这个式子也就是0x01 但数组是从下表0开始的 你越界了并且也没有初始化 所以你看到的是垃圾的数值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;最佳)
更正:逗号表达式的值是最右边的表达式的值
你让编译器怎么解释呢?
显然只能解释为给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;最佳)
更正:逗号表达式的值是最右边的表达式的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只能在定义的时候初始化
struct stu a={....};
不能单独再用.
当然你可以期待更好支持0x的编译器出现
至少VC2010里的cl编译器还不行
struct stu a={....};
不能单独再用.
当然你可以期待更好支持0x的编译器出现
至少VC2010里的cl编译器还不行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你那已经不是初始化了,是赋值了,所以会出错,数组不能那样赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询