Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么要在字符串数组中添加空字符?_C_Arrays_String_Character Arrays - Fatal编程技术网

C 为什么要在字符串数组中添加空字符?

C 为什么要在字符串数组中添加空字符?,c,arrays,string,character-arrays,C,Arrays,String,Character Arrays,我知道我们必须使用空字符来终止字符串数组,如下所示: char str[5] = { 'A','N','S','\0' }; 但我只是想知道为什么必须使用空字符来终止这样的数组 另外,我们为什么不添加一个空字符来终止这些:- char str1[5]="ANS"; 这不是必需的,但如果您使用的是任何标准库,他们都会期待它 在C语言中,NULL终止是字符数组与字符串(以NULL终止的字符数组)的区别。大多数字符串操作函数都依赖于NULL来知道字符串何时完成(以及它的工作何时完成),而不适用于简

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

char str[5] = { 'A','N','S','\0' };
但我只是想知道为什么必须使用空字符来终止这样的数组

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

char str1[5]="ANS";

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

在C语言中,NULL终止是字符数组与字符串(以NULL终止的字符数组)的区别。大多数字符串操作函数都依赖于NULL来知道字符串何时完成(以及它的工作何时完成),而不适用于简单的字符数组(例如,他们将继续工作,越过数组的边界,并继续工作,直到它在内存中的某个地方找到一个空值——通常会在运行时损坏内存)

在C语言中,0(整数值)被视为布尔值假-所有其他值都被视为真。iffor,而使用0(假)或非零(真)来确定如何分支或是否循环。char是一种整数类型,是一个空字符(\0)实际上只是一个十进制整数值为0的字符-即FALSE。这使得操作或复制字符串等功能变得非常简单,因为只要它所处理的字符不为零(即TRUE),它们就可以安全地循环,并在遇到空字符(即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. char source[]=“Test”;//实际上是:T\0(“\0”是空字符) char dest[8]; int i=0; 半货币; 做{ curr=来源[i]; dest[i]=当前; i++; }while(curr);//将循环,只要条件为TRUE,即非零,除NULL以外的所有字符。
因为空值需要一个字节,而用字符串本身存储字符串的长度可能需要多个字节。当时内存不足,所以较小的解决方案胜出。这就是我要寻找的。下面是一篇维基百科文章,它提供了您的历史背景:我想您的意思是
char str[5]={'a'、'N'、's'、'\0};
字符str1[5]=“ANS”;
(如果连显式长度)我编辑了你的问题,因为你的代码示例是错误的。NULL是指针值。NUL是ASCII字符。字符数组以NUL结尾。字符指针的值可能为NULL。C对
'\0'
使用NULL字符,对NULL指针常量使用
NULL
NUL
是从ASCII来表示代码0的。建议修改ing post.是和否…NUL(ASCII 0d)是Null的缩写,就像CR(ASCII 13d)是回车的缩写一样。