6

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

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

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

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

char str1[5]="ANS";
4

2 回答 2

9

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)。

例子:

    字符源[]="测试"; // 实际上:测试 \0('\0' 是 NULL 字符)
    字符目的地[8];

    诠释我=0;
    char curr;

    做 {
       当前=源[i];
       dest[i] = 当前;
       我++;
       } 而(当前);//只要条件为真就会循环,即。非零,除 NULL 外的所有字符。

于 2013-06-08T02:55:26.873 回答
1

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

于 2013-06-08T02:34:54.513 回答