在c99中有没有办法让复合文字具有可变长度?

2023-12-21

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

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(使用前将#替换为@)

在c99中有没有办法让复合文字具有可变长度? 的相关文章

随机推荐

  • 在 C++ 中读取二进制文件而不将整个文件缓冲到内存中

    为了制作二进制比较器 我尝试使用 CreateFileW 函数读取两个文件的二进制内容 然而 这会导致整个文件被缓冲到内存中 这对于大文件 500MB 来说是一个问题 我已经四处寻找其他函数 这些函数可以让我只缓冲文件的一部分 但我没有找到
  • 如何修复 Visual Studio 中的 LNK1104 错误?

    首先 请允许我向您介绍一些背景知识 我正在尝试模仿我童年的游戏 在这方面已经做了很多工作模拟上述游戏 https github com VanaDev Vana 并且我通过 Windows 设置指南取得了一些不错的进展 可以找到here h
  • 有APL的开源实现吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我应该“始终”同步对多个线程使用的所有双字段/属性/变量的访问吗?

    注意我倾向于编写无锁代码 因此我会尽可能避免任何类型的锁 相反 我只是使用while true 循环 因为我有很多CPU能力 据那http msdn microsoft com en us library aa691278 28VS 71
  • 在 SQL Server 2014 Developer 中生成 20 亿行的有效方法

    长话短说 我正在测试一个通过网络连接从表中清除条目的系统 预计该功能最多可处理超过 20 亿个条目 我需要对此进行压力测试才能确定 这是我的测试脚本 最多可以在十分钟内生成 980 万个 DECLARE I INT 0 WHILE I lt
  • moment.js 24 小时格式

    如何以 24 小时格式而不是 12 小时格式显示时间 我正在使用 moment js 我很确定这些线条可能与此有关 meridiem function hours minutes isLower if hours gt 11 return
  • MASM 中的 _emit 相当于什么

    我正在尝试将 Visual Studio 中编写的一些内联汇编代码移植到 MASM64 中 原始代码使用 emit 这是一条伪指令 在当前文本段的当前位置定义一个字节 我如何在 x64 汇编 MASM 中执行相同的操作 你可以只使用db a
  • 如何在 MVC 应用程序中缓存数据

    我已经阅读了大量有关 MVC 应用程序中页面缓存和部分页面缓存的信息 但是 我想知道您如何缓存数据 在我的场景中 我将使用 LINQ to Entities 实体框架 在第一次调用 GetNames 或任何方法 时 我想从数据库中获取数据
  • SQL 伪随机文本生成器

    我正在对 SQL 存储过程进行一些性能测试 只想使用一个快速数据生成器进行测试 我正在寻找一种简单的方法来生成伪随机 在这种情况下不需要真正的随机 varchar 字段 到目前为止 我的想法是对可以使用的有效字符进行字符定义 然后根据该定义
  • 将活动发送到后台后如何重新获得对活动的访问权限

    使用 Espresso 我尝试测试使用 Home 按钮将 Activity 发送到后台 然后再次将其放在前台进行一些检查 EspressoTest public void test onSomeView check matches isDi
  • Laravel - 禁止您无权访问此服务器上的 /

    我的 laravel 安装昨天工作正常 但今天出现以下错误 Forbidden You don t have permission to access on this server Additionally a 403 Forbidden
  • 如何在 Delphi XE2 中向 Mac OS Finder 添加菜单项

    我正在开发针对 Mac OS 和 Windows 的 Delphi XE2 应用程序 我想集成到上下文菜单中 对于 Windows 这是一个简单的任务 但对于 Mac 操作系统我不知道该怎么做 我读了提供服务 http developer
  • 谷歌地图在真实的 Android 设备上是空白的 - 但可以在模拟器上使用

    Hola 我正在尝试让地图工作 它似乎在 Nexus 6 模拟器上运行良好 但是当我在 Moto G 或 Samsung Galaxy 上运行它时 地图完全是银行的 它只在底角包含 google 徽标 我已经生成了一个谷歌地图密钥并将其放入
  • 如何使共享操作图标变为白色而不是灰色

    我的应用程序有ShareAction图标如下所示 我如何让它变成白色而不是灰色 看起来现在已经禁用了 我的 XML 是 menu menu
  • 更改 JTable 中行的背景颜色

    我有一个包含 3 列的 JTable 我已经设置了TableCellRenderer对于所有这样的 3 列 也许不是很有效 for int i 0 i lt 3 i myJTable getColumnModel getColumn i s
  • 查找连接我的设备的串行端口

    我开始使用密码键盘工作 我需要我的程序找到密码键盘连接的端口 而无需用户交互 我尝试过 Dim searcher As New ManagementObjectSearcher root cimv2 SELECT FROM Win32 Se
  • MySQL 中的条件更新

    我在尝试着UPDATE表中的值 但我需要添加一些条件 我找到了这个功能CASE 但如果这是最好的方法 我不是 这是一个例子 我的表是 关系 userid1 userid2 name1 name2 我得到了例如 SELECT FROM rel
  • javax.imageio.ImageIO 在灰度图像上读取不正确的 RGB 值

    我有一个图像 将其命名为grayscale jpg 现在 我在 The Gimp 中打开该图像并将颜色模式更改为 RGB 并将其另存为 color jpg 如果我在任何图像查看器中查看grayscale jpg和color jpg 它们看起
  • css 我如何从检查器中找到css文件

    我必须搜索确切的 css 文件 其中对规则进行了更改 但我不记得该规则在哪里 如何从检查器中找到css文件 选择器附近有一个 CSS 文件名 primary unified 例如
  • 在c99中有没有办法让复合文字具有可变长度?

    我知道可以通过正常声明数组来获得在运行时确定长度的数组 char buf len 我知道我可以将数组声明为复合文字并将其分配给中途的指针 char buf buf char 5 0 但是 将两者结合起来不起作用 标准不允许 我的问题是 有什