我知道可以通过正常声明数组来获得在运行时确定长度的数组:
char buf[len];
我知道我可以将数组声明为复合文字并将其分配给中途的指针:
char *buf;
....
buf = (char[5]) {0};
但是,将两者结合起来不起作用(标准不允许)。
我的问题是:有什么办法可以达到下面代码的效果吗? (笔记len
)
char *buf;
....
buf = (char[len]) {0};
谢谢。
该语言明确禁止这样做
6.5.2.5 复合文字
约束条件
1类型名称应指定对象类型或未知数组
size,但不是变长数组类型。
如果您需要这样的东西,则必须使用命名的 VLA 对象而不是复合文字。但是,请注意,VLA 类型不接受初始值设定项,这意味着您不能执行此操作
char buf[len] = { 0 }; // ERROR for non-constant `len`
(我不知道这个限制背后的理由是什么。)
因此,除了使用命名的 VLA 对象之外,您还必须想出一些方法将其归零,例如memset
或显式循环。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)