我知道通过正常声明数组,可以在运行时确定长度的数组:
char buf[len];
我知道我可以将数组声明为复合litral并将其分配给指针中途:
char *buf;
....
buf = (char[5]) {0};
然而,将两者结合起来并不起作用(标准不允许)。
我的问题是:有没有办法达到以下代码的效果? (注意len
)
char *buf;
....
buf = (char[len]) {0};
谢谢。
答案 0 :(得分:7)
该语言明确禁止此
6.5.2.5复合文字
<强>约束强>
1 类型名称应指定对象类型或未知数组 大小,但不是可变长度数组类型。
如果你需要这样的东西,你必须使用一个命名的VLA对象而不是compund literal。但请注意,VLA类型不接受初始值设定项,这意味着您无法执行此操作
char buf[len] = { 0 }; // ERROR for non-constant `len`
(我不知道这种限制背后的理由是什么。)
因此,除了使用命名的VLA对象之外,您还必须想出一些方法来将其归零,例如memset
或显式循环。