{ char ch;
double x;
char a[];
}c[2][2]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}};
//error C2233: '<Unknown>' : arrays of objects containing zero-size arrays are illegal
//error C2078: too many initializers
我不知道这样对二维结构体初始化为什么会出这样的错。
28 个解决方案
#1
字符串是双引号
#2
对不起,题打错了,是二维结构体数组初始化出错,改成双引号一样的是这样的错误,所以我没去改
#3
结构体的赋值,还是老老实实使用obj.member = XXX的方式,C语言没这么智能
#4
//error C2233: '<Unknown>' : arrays of objects containing zero-size arrays are illegal
这个错误可能是因为结构体里面的数组a[]初始体出错,但是//error C2078: too many initializers
这个我就搞不明白了,怎么可能会多呢,明明是还不够。
这个错误可能是因为结构体里面的数组a[]初始体出错,但是//error C2078: too many initializers
这个我就搞不明白了,怎么可能会多呢,明明是还不够。
#5
char a[]; 这句能编译过吗?数组要有大小的
char a[N];
或char *a;
char a[N];
或char *a;
#6
改成char *a;后第一个错误就会没有,但是数组初始化不是给定了所有的元素就可以不用标出大小。
#7
但是我总得弄明白为什么这样会出错吧。
#8
你这是结构体啊,结构体定义时,大小要确定的,连定义都通不过,怎么赋值啊
#9
static struct
{ char ch;
double x;
char a[10];
} c[1][3]={{{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}}};
但改成这样就不会出错了。
{ char ch;
double x;
char a[10];
} c[1][3]={{{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}}};
但改成这样就不会出错了。
#10
我觉得c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}}};
应该是这样存储的:
c[0][0]:'a'
3.5
"bc"
c[0][1]:'c'
4.5
"de"
c[1][0]:'m'
8.6
"abc"
c[1][1]:....
应该是这样存储的:
c[0][0]:'a'
3.5
"bc"
c[0][1]:'c'
4.5
"de"
c[1][0]:'m'
8.6
"abc"
c[1][1]:....
#11
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{'m',8.6,"abc"}};
这样也不会出错,多少列一定要标出!!!
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{'m',8.6,"abc"}};
这样也不会出错,多少列一定要标出!!!
#12
数组是2*2的
{{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}}; 是1*3的,
所以报error C2078: too many initializers
{{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}}; 是1*3的,
所以报error C2078: too many initializers
#13
同意你的说法,谢谢!
#14
c[2][3]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}}; 也不会出错
#15
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
而
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{{'m',8.6,"abc"},{'s',5.9,"iii"}}};
又不出错,一定要把第二维的个数标明吗,那为什么上一例的不用标明也不会出错?
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
而
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{{'m',8.6,"abc"},{'s',5.9,"iii"}}};
又不出错,一定要把第二维的个数标明吗,那为什么上一例的不用标明也不会出错?
#16
用1 * 3 的初始化 2 * 3 的自然可以,
#17
但是以下还是出同样错:static struct
{ char ch;
double x;
char a[10];
}c[1][3]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}};//error C2078: too many initializers
#18
#include<stdio.h>
static struct
{ char ch;
double x;
char a[10]; //这样看的清晰。
}c[2][2]={
{
{'a',3.5,"bc"},{'s',3.1,"sd"}
},
{
{'c',4.5,"de"},{'e',9.4,"we"}
}
};
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={ //你的这个相当于在地一维的两个元素中,初始化三个元素,
{
{'a',3.5,"bc"},{'c',4.5,"de"}//,{'a',3,"d"}
},
{ }
};
#19
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
#20
你是用什么编译器,我用gcc,只报警告,不报错。
程序如下:
int main()
{
struct { char ch;
double x;
char a[10];
}c[1][3]={
{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}
};
}
编译结果如下:
2DimensionArray.c: In function ‘main’:
2DimensionArray.c:6: warning: excess elements in array initializer
2DimensionArray.c:6: warning: (near initialization for ‘c’)
2DimensionArray.c:6: warning: excess elements in array initializer
2DimensionArray.c:6: warning: (near initialization for ‘c’)
#21
你的是三个大括号当然不报,去掉最外层的那对大括号就会出错了
#22
看错了,我用的是VC++
#23
warning: excess elements in array initializer
你的这个报警在我这里就报错了
你的这个报警在我这里就报错了
#24
static struct
{
char ch;
double x;
char a[10];
} c[2][2] = { {{'a', 3.5, "bc"}, {'c', 4.5, "de"}}, {{'m', 8.6, "abc"}, } };
或直接
static struct
{
char ch;
double x;
char a[10];
} c[2][2] = { 'a', 3.5, "bc", 'c', 4.5, "de", 'm', 8.6, "abc" };
#25
static struct
{
char ch;
double x;
char a[10];
} c[2][2] = { 'a', 3.5, "bc", 'c', 4.5, "de", 'm', 8.6, "abc" };
为什么上面的可以,而下面这个
c[2][2]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}};
就会出错呢?
{
char ch;
double x;
char a[10];
} c[2][2] = { 'a', 3.5, "bc", 'c', 4.5, "de", 'm', 8.6, "abc" };
为什么上面的可以,而下面这个
c[2][2]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}};
就会出错呢?
#26
没有哪个能说出为什么吗?
#27
貌似多了次外层的一重大括号,
c[2][2]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}};
试试.
#28
c[2][2]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}};会出错
就是改成:c[1][3]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}};也会出错,但:c[2][2]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}};就不会出错
我是越来越搞不明的数组的初始化了,不知道它是怎样给它们的成员赋值的。
#1
字符串是双引号
#2
对不起,题打错了,是二维结构体数组初始化出错,改成双引号一样的是这样的错误,所以我没去改
#3
结构体的赋值,还是老老实实使用obj.member = XXX的方式,C语言没这么智能
#4
//error C2233: '<Unknown>' : arrays of objects containing zero-size arrays are illegal
这个错误可能是因为结构体里面的数组a[]初始体出错,但是//error C2078: too many initializers
这个我就搞不明白了,怎么可能会多呢,明明是还不够。
这个错误可能是因为结构体里面的数组a[]初始体出错,但是//error C2078: too many initializers
这个我就搞不明白了,怎么可能会多呢,明明是还不够。
#5
char a[]; 这句能编译过吗?数组要有大小的
char a[N];
或char *a;
char a[N];
或char *a;
#6
改成char *a;后第一个错误就会没有,但是数组初始化不是给定了所有的元素就可以不用标出大小。
#7
但是我总得弄明白为什么这样会出错吧。
#8
你这是结构体啊,结构体定义时,大小要确定的,连定义都通不过,怎么赋值啊
#9
static struct
{ char ch;
double x;
char a[10];
} c[1][3]={{{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}}};
但改成这样就不会出错了。
{ char ch;
double x;
char a[10];
} c[1][3]={{{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}}};
但改成这样就不会出错了。
#10
我觉得c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}}};
应该是这样存储的:
c[0][0]:'a'
3.5
"bc"
c[0][1]:'c'
4.5
"de"
c[1][0]:'m'
8.6
"abc"
c[1][1]:....
应该是这样存储的:
c[0][0]:'a'
3.5
"bc"
c[0][1]:'c'
4.5
"de"
c[1][0]:'m'
8.6
"abc"
c[1][1]:....
#11
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{'m',8.6,"abc"}};
这样也不会出错,多少列一定要标出!!!
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{'m',8.6,"abc"}};
这样也不会出错,多少列一定要标出!!!
#12
数组是2*2的
{{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}}; 是1*3的,
所以报error C2078: too many initializers
{{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}}; 是1*3的,
所以报error C2078: too many initializers
#13
同意你的说法,谢谢!
#14
c[2][3]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}}; 也不会出错
#15
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
而
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{{'m',8.6,"abc"},{'s',5.9,"iii"}}};
又不出错,一定要把第二维的个数标明吗,那为什么上一例的不用标明也不会出错?
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
而
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{{'a',3.5,"bc"},{'c',4.5,"de"}},{{'m',8.6,"abc"},{'s',5.9,"iii"}}};
又不出错,一定要把第二维的个数标明吗,那为什么上一例的不用标明也不会出错?
#16
用1 * 3 的初始化 2 * 3 的自然可以,
#17
但是以下还是出同样错:static struct
{ char ch;
double x;
char a[10];
}c[1][3]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}};//error C2078: too many initializers
#18
#include<stdio.h>
static struct
{ char ch;
double x;
char a[10]; //这样看的清晰。
}c[2][2]={
{
{'a',3.5,"bc"},{'s',3.1,"sd"}
},
{
{'c',4.5,"de"},{'e',9.4,"we"}
}
};
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={ //你的这个相当于在地一维的两个元素中,初始化三个元素,
{
{'a',3.5,"bc"},{'c',4.5,"de"}//,{'a',3,"d"}
},
{ }
};
#19
static struct
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
{ char ch;
double x;
char a[10];
}c[2][2]={{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"},{'s',5.9,"iii"}};还是出错
//error C2078: too many initializers
但是下面这个不会出错,为什么?
static int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
#20
你是用什么编译器,我用gcc,只报警告,不报错。
程序如下:
int main()
{
struct { char ch;
double x;
char a[10];
}c[1][3]={
{'a',3.5,"bc"},{'c',4.5,"de"},{'m',8.6,"abc"}
};
}
编译结果如下:
2DimensionArray.c: In function ‘main’:
2DimensionArray.c:6: warning: excess elements in array initializer
2DimensionArray.c:6: warning: (near initialization for ‘c’)
2DimensionArray.c:6: warning: excess elements in array initializer
2DimensionArray.c:6: warning: (near initialization for ‘c’)
#21
你的是三个大括号当然不报,去掉最外层的那对大括号就会出错了
#22
看错了,我用的是VC++
#23
warning: excess elements in array initializer
你的这个报警在我这里就报错了
你的这个报警在我这里就报错了
#24
static struct
{
char ch;
double x;
char a[10];
} c[2][2] = { {{'a', 3.5, "bc"}, {'c', 4.5, "de"}}, {{'m', 8.6, "abc"}, } };
或直接
static struct
{
char ch;
double x;
char a[10];
} c[2][2] = { 'a', 3.5, "bc", 'c', 4.5, "de", 'm', 8.6, "abc" };
#25
static struct
{
char ch;
double x;
char a[10];
} c[2][2] = { 'a', 3.5, "bc", 'c', 4.5, "de", 'm', 8.6, "abc" };
为什么上面的可以,而下面这个
c[2][2]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}};
就会出错呢?
{
char ch;
double x;
char a[10];
} c[2][2] = { 'a', 3.5, "bc", 'c', 4.5, "de", 'm', 8.6, "abc" };
为什么上面的可以,而下面这个
c[2][2]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}};
就会出错呢?
#26
没有哪个能说出为什么吗?
#27
貌似多了次外层的一重大括号,
c[2][2]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}};
试试.
#28
c[2][2]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}};会出错
就是改成:c[1][3]={{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}};也会出错,但:c[2][2]={{{'a',3.5,'bc'},{'c',4.5,'de'},{'m',8.6,'abc'}}};就不会出错
我是越来越搞不明的数组的初始化了,不知道它是怎样给它们的成员赋值的。