【问题标题】:declare char variable in c++, why need to add 1 for declare the array size [duplicate]在c ++中声明char变量,为什么需要加1来声明数组大小[重复]
【发布时间】:2021-01-08 03:45:10
【问题描述】:

我们声明char变量时有一种说法。

我们应该这样声明 -> char ArrayName[Maximum_C-String_Size+1];

例如:

char arr[4+1] = {'a', 'b', 'c', 'd'}

但是 arr[4] = {'a', 'b', 'c', 'd'} 也可以

为什么要加1? 谢谢!

【问题讨论】:

  • 如果您打算将arr 视为以NUL 结尾的字符串,则需要加1。额外的元素是存储 NUL 终止符。
  • 字符符号'\n'结束字符串
  • 如果您找到了使用 arr[4+1] 的教程或书籍,请停止使用该教程或书籍并找到更好的。

标签: c++ arrays c char declare


【解决方案1】:

没有必要这样做,除非您定义的东西将用作以空字符结尾的字符串。

// these two definitions are equivalent
char a[5] = { 'a', 'b', 'c', 'd' };
char b[5] = { 'a', 'b', 'c', 'd', '\0' };

如果您只想要一个包含 4 个字符值的数组,并且您不会将它与任何期望找到字符串终止符的东西一起使用,那么您不需要添加额外的元素。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多