【问题标题】:Why adding a Null Character in a String array? [duplicate]为什么在字符串数组中添加空字符? [复制]
【发布时间】:2013-06-08 02:30:52
【问题描述】:

我知道我们必须使用空字符来终止这样的字符串数组:

char str[5] = { 'A','N','S','\0' };

但我只是想知道为什么必须使用空字符来终止这样的数组?

为什么我们不添加一个空字符来终止这些:-

char str1[5]="ANS";

【问题讨论】:

  • 因为 null 占用一个字节,而将字符串的长度与字符串本身一起存储可能占用多个字节。过去内存稀缺,因此较小的解决方案胜出。
  • 现在这就是我要找的。​​span>
  • 这里有一篇 Wikipedia 文章,介绍了历史背景:en.wikipedia.org/wiki/Null-terminated_string
  • 我认为您的意思是 char str[5] = {'A','N','S','\0'};char str1[5] = "ANS";(即使是明确的长度)
  • 我编辑了您的问题,因为您的代码示例错误。

标签: c arrays string character-arrays


【解决方案1】:

NULL 终止符是 C 中 char 数组与字符串(一个 NULL 终止符 char-array)的区别。大多数字符串操作函数依赖 NULL 来知道字符串何时完成(以及它的工作完成) ,并且不适用于简单的字符数组(例如,它们将继续工作超出数组的边界,并继续工作,直到它在内存中的某处找到 NULL - 通常会破坏内存)。

在 C 中,0(整数值)被认为是布尔值 FALSE - 所有其他值都被认为是 TRUE。 ifforwhile 使用 0 (FALSE) 或非零 (TRUE) 来阻止如何分支或 if 循环。 char 是整数类型,NULL 字符 (\0) 实际上只是一个十进制整数值为 0 的 char - 即。错误的。这使得为​​诸如操作或复制字符串之类的事情制作函数变得非常简单,因为只要它正在处理的字符为非零(即 TRUE),它们就可以安全地循环,并在遇到 NULL 字符时停止(即。 FALSE) - 因为这表示字符串的结尾。它产生了非常简单的循环,因为我们不需要比较,我们只需要知道它是 0 (FALSE) 还是不是 (TRUE)。

例子:

字符源[]="测试"; // 实际上:T e s t \0('\0' 是 NULL 字符) 字符目的地[8]; 诠释我=0; char curr; 做 { 当前=源[i]; dest[i] = 当前; 我++; } 而(当前); //只要条件为真就会循环,即。非零,除 NULL 外的所有字符。

【讨论】:

  • NULL 是一个指针值。 NUL 是一个 ASCII 字符。 Char 数组以 NUL 结尾。字符指针的值可能为 NULL。
  • C 对'\0' 使用空字符,对空指针常量 使用NULLNUL是从ASCII表示代码0。建议修改帖子。
  • 是与否... NUL (ASCII 0d) 是 Null 的缩写,就像 CR (ASCII 13d) 是回车的缩写。
【解决方案2】:

这不是必要的,但如果您使用任何标准库,他们都期望它。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2020-04-30
    • 1970-01-01
    • 2017-03-11
    • 2016-09-15
    • 2016-11-23
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多