我正在尝试使用malloc分配结构,然后使用点语法对其进行初始化。我尝试了一些东西,但这似乎是不可能的。
#include <stdlib.h>
#include <stdio.h>
struct t {
int nb;
};
struct t *foo()
{
struct t *f = malloc(sizeof(struct t));
*f = { .nb = 0 };
return f;
}
int main(void)
{
printf("%d\n", foo()->nb);
return 0;
}
编译器说:
$ gcc -Wall -Werror -std=c99 -Wextra -pedantic test.c
test.c:11:8: error: expected expression
*f = { .nb = 0 };
^
1 error generated.
我尝试了没有取消引用的分配,但又犯了一个错误,我期望指针和非指针变量的分配不兼容,但是消息是相同的。
您负担得起一些技巧吗?
BR。
答案 0 :(得分:4)
您的代码不起作用,因为严格来讲,它不是初始化,而是赋值。您需要在右侧使用一个有效的对象表达式来使其起作用,而用括号括起来的初始化器根本不是那样。但这可以很容易地通过将rhs变成复合文字来修改:
*f = (struct t){ .nb = 0 };