首页 > 解决方案 > 在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++arrayscchardeclare

解决方案


如果您将 C 风格的字符串存储在数组中,那么您需要一个额外的元素作为字符串终止符。

与 C++ 不同,C 没有唯一的字符串数据类型。在 C 中,字符串只是一个包含零值终止符的字符值序列。字符串"foo"表示为 sequence {'f','o','o',0}。该终止符是各种字符串处理函数如何知道字符串在哪里结束的。终止符不是可打印的字符,不计入字符串的长度(strlen("foo")返回 3,而不是 4),但是您需要留出空间来存储它。因此,如果您需要存储一个长度为 N 个字符的字符串,则存储它的数组需要至少 N+1 个元素宽以考虑终止符。

但是,如果您存储的序列不打算被视为字符串(您不打算打印它或使用字符串库函数对其进行操作),那么您不需要留出额外的元素。


推荐阅读