c++ - 在c++中声明char变量,为什么需要加1来声明数组大小
问题描述
当我们声明 char 变量时,有一种说法。
我们应该这样声明 ->char ArrayName[Maximum_C-String_Size+1];
例如:
char arr[4+1] = {'a', 'b', 'c', 'd'}
但
arr[4] = {'a', 'b', 'c', 'd'}
也是工作
为什么需要加1?谢谢!
解决方案
如果您将 C 风格的字符串存储在数组中,那么您需要一个额外的元素作为字符串终止符。
与 C++ 不同,C 没有唯一的字符串数据类型。在 C 中,字符串只是一个包含零值终止符的字符值序列。字符串"foo"
表示为 sequence {'f','o','o',0}
。该终止符是各种字符串处理函数如何知道字符串在哪里结束的。终止符不是可打印的字符,不计入字符串的长度(strlen("foo")
返回 3,而不是 4),但是您需要留出空间来存储它。因此,如果您需要存储一个长度为 N 个字符的字符串,则存储它的数组需要至少 N+1 个元素宽以考虑终止符。
但是,如果您存储的序列不打算被视为字符串(您不打算打印它或使用字符串库函数对其进行操作),那么您不需要留出额外的元素。
推荐阅读
- string - 我正在尝试将输入字符串与存储在 var 中的字符串进行比较。但它不工作
- python - 使用“in”语句检查列表中的多个值之一
- java - 在 Java 14 中在运行时将 JarFile 添加到 Classpath
- android - 未解决的`kotlin-parcelize`
- google-cloud-platform - GCP gsutil set cors:没有这样的文件或目录
- css - 页面外的 React Navbar 下拉菜单
- api - 使用 XML 和 Javascript 的 USPS 地址验证 API
- javascript - 当我打开当前目标时,如何在组件的所有实例中隐藏 div
- wordpress - 在 Wordpress 上为网站的所有页面设置特色图片
- javascript - 在react中在localstorage中设置源url后不显示iframe