我一直在用C语言写一个终端应用程序,我一直有一个奇怪的结构问题。当我尝试编译时,我得到错误“错误:初始化元素不是常量”。非常感谢任何帮助。
这是我的代码:
| user_id | action_type | action_date | lag_action_date | elapsed_days | cnt_logins_between_action_dates |
|---------|---------------|-------------|-----------------|--------------|---------------------------------|
| 12345 | action_type_1 | 6/27/2017 | 3/3/2017 | 116 | 5 |
| 12345 | action_type_1 | 3/3/2017 | 2/28/2017 | 3 | 4 |
| 12345 | action_type_1 | 2/28/2017 | NULL | NULL | 1 |
| 12345 | action_type_2 | 3/6/2017 | 3/3/2017 | 3 | 2 |
| 12345 | action_type_2 | 3/3/2017 | 3/25/2016 | 343 | 7 |
| 12345 | action_type_2 | 3/25/2016 | NULL | NULL | 1 |
| 12345 | action_type_4 | 3/6/2017 | 3/3/2017 | 3 | 2 |
| 12345 | action_type_4 | 3/3/2017 | NULL | NULL | 1 |
| 99887 | action_type_1 | 4/1/2017 | 2/11/2017 | 49 | 8 |
| 99887 | action_type_1 | 2/11/2017 | 1/28/2017 | 14 | 2 |
| 99887 | action_type_1 | 1/28/2017 | NULL | NULL | 1 |
答案 0 :(得分:2)
问题是你在函数外面调用malloc。
这将解决您的问题:
typedef struct {
int x;
int y;
char style;
} Pixel;
int main(void) {
Pixel *pixels = malloc(9 * 128);
}
在C中,如果变量不在任何函数内,则无法在变量init上调用函数。
int a = 5; //OK
int b = myfunc(); //ERROR, this was your case
int main() {
int c = 5; //OK
int d = myfunc(); //OK
}
从代码检查开始,我认为您认为sizeof(Pixel)
是9
个字节,但情况并非如此。当您调用malloc时,请使用以下代码:
Pixel *pixels = malloc(sizeof(Pixel) * 128);
此代码将在任何平台上的单行中为128 Pixel
结构分配内存。
进一步阅读:
答案 1 :(得分:1)
这段代码显然不属于任何功能。那么=
之后的表达式只能是初始化器,并且初始化器必须是静态的(即可以在编译时计算)但是,调用(在这种情况下为malloc)只能在函数中。所以编译器抱怨。
以下是正确的:
typedef struct {
int x;
int y;
char style;
} Pixel;
int main(void)
{
Pixel *pixels = (Pixel *)malloc(sizeof(Pixel)*128);
//...
}