为什么在String数组中添加Null字符?

时间:2013-06-08 02:30:53

标签: c arrays string character-arrays

我知道我们必须使用空字符来终止字符串数组,如下所示:

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

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

另外,为什么我们不添加null charater来终止它们: -

char str1[5]="ANS";

2 个答案:

答案 0 :(得分:9)

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

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

示例:


    char source[]="Test";  // Actually: T e s t \0 ('\0' is the NULL-character)
    char dest[8];

    int i=0;
    char curr;

    do {
       curr = source[i];
       dest[i] = curr;
       i++;
       } while(curr); //Will loop as long as condition is TRUE, ie. non-zero, all chars but NULL.

答案 1 :(得分:1)

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

相关问题