gpt4 book ai didi

c - 复合文字在c99中有什么方法可以变长吗?

转载 作者:太空狗 更新时间:2023-10-29 15:24:38 25 4
gpt4 key购买 nike

我知道通过正常声明数组可以在运行时确定长度的数组:

char buf[len];

而且我知道我可以将数组声明为复合字面量并将其分配给中间的指针:

char *buf;
....
buf = (char[5]) {0};

但是,将两者结合起来是行不通的(标准不允许)。

我的问题是:有什么办法可以实现下面代码的效果吗? (注意 len)

char *buf;
....
buf = (char[len]) {0};

谢谢。

最佳答案

语言明确禁止这样做

6.5.2.5 Compound literals

Constraints

1 The type name shall specify an object type or an array of unknownsize, but not a variable length array type.

如果您需要这样的东西,您必须使用命名的 VLA 对象而不是复合文字。但是,请注意 VLA 类型不接受初始化器,这意味着您不能这样做

char buf[len] = { 0 }; // ERROR for non-constant `len`

(我不知道这个限制背后的理由是什么。)

因此,除了使用命名的 VLA 对象之外,您还必须想出一些方法将其清零,例如 memset 或显式循环。

关于c - 复合文字在c99中有什么方法可以变长吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com