当初始化固定大小的 char 数组时没有足够的空间容纳 null 终止符时,不会出现编译器错误

2023-11-22

假设我有以下 c char 数组:

char okaysize4[5] = "four";   // line 5
char toosmall4[4] = "four";   // line 6
char toosmall3[3] = "four";   // line 7

当我使用 gcc 4.4.7 编译时,出现以下错误:

array.c:7:警告:字符数组的初始化字符串太长

预计第 7 行会出现此错误,因为我正在尝试填充 5 个字符("four" + \0)成一个 3 元素数组。 由于 5 元素数组足够大,因此第 5 行预计不会出现错误。

然而,令我惊讶的是第 6 行没有类似的错误。最终在toosmall4是一个未终止的字符串,这可能会导致各种麻烦。

我的理解是c字符串文字"four"由于空终止符,长度应为五个字符。实际上sizeof("four")是5。那为什么编译器这里不报错呢?

有什么方法可以改变我的声明/定义/初始化,以便在这种情况下标记错误?


这是第 6 行的预期行为,来自C99标准草案部分6.7.8 初始化段落14 says (强调我的):

字符类型的数组可以通过字符串来初始化 文字,可以选择用大括号括起来。的连续字符 字符串文字 (包括终止空字符 是否有空间或者数组大小未知)初始化 数组的元素。

在C11标准草案中,具有类似措辞的相关部分是6.7.9段落14,并且作为C常见问题解答说:

因此,该数组不是真正的 C 字符串,不能与 strcpy、printf 的 %s 格式等

正如基思·汤普森指出的那样,C++更严格的是,C++标准草案中的相关部分是这样说的:

初始值设定项的数量不得多于数组元素的数量。 [ 例子:

char cv[4] = "asdf"; // error

格式不正确,因为没有空间用于隐含的尾随“\0”。 —结束示例]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当初始化固定大小的 char 数组时没有足够的空间容纳 null 终止符时,不会出现编译器错误 的相关文章

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 使用日期 Swift 3 对字典数组进行排序

    我有一个名为 myArray 的数组 其中添加了字典 我希望该字典按时间排序 这是字典中的键 那个时间是在 String 中 时间的日期格式为 yyyy MM dd HH mm ss 我尝试使用下面的代码解决方案 但给出了 从 字符串转换
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 重写方法中的变量名称不正确

    当我让 Android Studio 生成覆盖方法时 它将生成具有奇怪参数名称的方法 例如根据文档 onCheckedChanged 应该如下所示 public void onCheckedChanged CompoundButton bu
  • ruby中各种变量作用域的区别

    Ruby 有 5 个变量作用域 局部变量 这些是正常变量 例如x 25 y gaurish where x and y是局部变量 实例变量 这些用 实际变量名前面的符号 主要与类一起使用 以便类的每个实例 对象都有不同 单独的值 例子 em
  • 使用 C# 中的 StackExchange / Sentinel 进行 Redis 故障转移

    我们目前正在使用 Redis 2 8 4 和 StackExchange Redis 并且很喜欢它 但目前没有任何针对硬件故障等的保护 我正在尝试让解决方案起作用 我们有主 从和哨兵监控 但无法完全到达那里 并且在搜索后我无法找到任何真正的
  • 如何在 SQL Server 中建立多对多关系模型?

    我需要在 SQL Server 数据库中引入两个表之间的多对多关系 这两个表都有一个整数作为主键 在 T SQL 中如何最好地完成此操作 考虑以下两个示例表定义 其中应该存在多对多关系 CREATE TABLE dbo Authors Id
  • 使用Intellij + Maven导入库:无法解析符号

    我已经在 IntelliJ 13 中使用 Maven 导入了一个库 JBox2D 以便在 android 项目中使用 Maven 没有给我任何错误消息 所以我假设库已正确导入 但是 一旦我尝试使用库中的类 我就会收到 无法解析符号 Inte
  • Spring Security默认登录页面代码位于哪里?

    默认登录页面在哪里生成春季安全4当你使用最简单的配置时
  • Python,成对“距离”,需要一种快速的方法来做到这一点

    在我的博士期间的一个业余项目中 我从事了用 Python 建模某些系统的任务 就效率而言 我的程序在以下问题中遇到了瓶颈 我将在最小工作示例中公开该问题 我处理大量由 3D 起点和终点编码的段 因此每个段由 6 个标量表示 我需要计算成对最
  • 将 TensorFlow 损失全局目标 (recall_at_ precision_loss) 与 Keras(而非指标)结合使用

    背景 我有一个有 5 个标签的多标签分类问题 例如 1 0 1 1 0 因此 我希望我的模型能够改进固定召回率 精确召回率 AUC 或 ROC AUC 等指标 使用损失函数没有意义 例如binary crossentropy 这与我想要优化
  • Sass/Compass 从变量中获取变量名

    我正在尝试制作一个 mixin 它可以让我根据您使用的变量名称创建适应的代码块 foo 00A9EC mixin menu color color color color a level2 color color a level2 visi
  • WPF TextFormatter 中第二行的缩进

    我正在使用 TextFormatter 制作 WPF 文本编辑器 我需要缩进每个段落中的第二行 第二行的缩进宽度应该与第一行第一个单词的宽度相同 包括第一个单词后面的空白 像这样的东西 Indent of second line in In
  • 从 Flutter 打开 Android Activity 和 iOS ViewController

    我有一个 Flutter 项目 需要一些需要在本机 Android Activity 或 iOS ViewController 中实现的某些功能 有没有办法导航到 android Activity 并向其传递数据 并在 Flutter 中从
  • 带有 MediaCodec Surface 的 AVC 硬件编码器可靠性如何?

    我正在开发一个 Android 应用程序 该应用程序使用 MediaCodec 使用 Surface 方法对 H 264 视频进行编码 我的目标是 Android 5 0 并且遵循了 bigflake com 中的所有示例和样本 我两年前开
  • MATLAB 中的矩阵乘法时间复杂度

    有谁知道MATLAB使用哪种算法进行矩阵乘法以及它的时间复杂度是多少 为了完整起见 如中所述这个线程 Matlab 使用DGEMM 双通用矩阵乘法 例程来自BLAS 基本线性代数子程序 请注意 BLAS 不存在单一的实现 它针对特定的处理器
  • newtonsoft json序列化时间跨度格式

    是否可以指定自定义格式TimeSpan序列化 使用Newtonsoft Json 我想要格式为 HH mm 的序列化字符串 例如 TimeSpan FromHours 5 gt 05 00 TimeSpan FromHours 5 gt 0
  • 更好的 git add -p 吗?

    有时我在没有安装 X Window 的系统上工作 并且无法使用 Git GUI 现有的控制台替代品是什么git add p 我几乎喜欢它所做的一切 实际上比 Git GUI 更喜欢 但我讨厌它不允许我查看整个图片并选择我想要查看块的顺序 这
  • .forEach 中 thisArg 的用途是什么?

    JavaScript 的对于每个文档指出 forEach语法是 arr forEach callback thisArg 有什么用thisArg The thisArg可以提供改变inner this的回调函数 未指定thisArg结果是t
  • 导入 theano 时出错“无法导入名称 gof”

    我目前收到错误 导入错误 无法导入名称 gof 导入 theano 时 gt gt gt import theano Traceback most recent call last File
  • 延迟生成 powerset

    我想计算一个集合的幂集 因为我不需要一次需要整个 powerset 所以最好延迟生成它 例如 powerset set a b c seq set set a set b set c set a b set a c set b c set
  • 组合 R + awk + ​​bash 命令

    我想结合awk和R语言 问题是我在指定目录中有一组 txt 文件 并且我不知道文件头的长度 在某些情况下 我必须跳过 25 行 而在其他情况下 我必须跳过 27 行等 所以我想输入一些 awk 命令来获取要跳过的行数 一旦获得该值 我就可以
  • 当初始化固定大小的 char 数组时没有足够的空间容纳 null 终止符时,不会出现编译器错误

    假设我有以下 c char 数组 char okaysize4 5 four line 5 char toosmall4 4 four line 6 char toosmall3 3 four line 7 当我使用 gcc 4 4 7 编