C语言的字符串为什么以0作为它的结尾?
c语言中字符数组并没有规定最后一个字符为'\0',甚至可以不包含'\0',添加'\0'作为结束标志是针对于c语言对字符串的处理而言的,因此,字符数组中最后一个字必须为‘\0’是错误的。
C语言中没有字符串类型,字符串是存放在字符型数组中的。在C语言中,是将字符串作为字符数组来处理的。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符'\0'作为结束标志 。
例如:char a[8]={'i','l','o','v','e','y','o','u'};把8个字符依次分别赋给c[0]~c[7]这8个元素。这样的字符数组长度为8,并没有在最后添加'\0'符号,但其初始化是完全正确的。
扩展资料:
C语言对'\0'结束的相关处理:
1、字符数组的初始化,如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即'\0')。例如:char a[9]={'1','2','3','4','5','6','7','8'};中,初始化数值只提供了8个,但字符长度为9,因此,会自动在补充空字符(即'\0')。
2、字符串常量初始化数组。
例如:char c[ ]={‘c’,‘ ’,‘p’,‘r’,‘o','g','r','a','m'};可写为:char c[ ]={"C program"} 或去掉{}写为:char c[ ]="C program";注意:此时数组c的长度不是9,而是10。因为字符串常量的最后由系统加上一个'\0'。上面的初始化与下面的初始化等价。
参考资料来源:百度百科-字符数组
因为c语言中没有字符串这种数据类型,只有char字符类型,在C语言中所谓的字符串其实是char数组,数组最后一个元素加上“\0",表示字符串结束,这是一种字符串的表达方式。
在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。
因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。
扩展资料:
说明:
把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};
实际上数组str1在内存中的实际存放情况为: c x j r . 2 1 i c . o r g '\0'
这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。 把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志'\0'也一同拷贝。
个案
1. 当数组长度不够。假设我们指定了数组长度,如:u8 str1[13]={"cxjr.21ic.org"};
由于字符组str1的长度为13,所以后面的信息会丢失,即'\0'丢失。
2. 如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如:
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};
如果希望数组以'\0'结束,则可以写成以下三者之一:
(1)u8 str1[]={"cxjr.21ic.org"}; //字符串赋值
(2)u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'}; //人工添加
(3)u8 str1[14]={'c','x','j','r','.','2','1','i','c','.','o','r','g'}; //故意给数组预留一个空位
参考资料来源:百度百科-字符串
这是因为,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\0'存入数组,并以此作为该字符串是否结束的标志。有了'\0'标志后,就不必再用字符数组的长度来判断字符串的长度了。 '\0'就是字符串结束标志。
比如说,把一个字符串赋值给数组:
char str1[]={"www.baidu.com"};
实际上数组str1在内存中的实际存放情况为:
www.baidu.com'\0'
这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。
把字符数组str1中的字符串拷贝到字符数组str2中。串结束标志'\0'也一同拷贝。
但是……也有一些例外情况发生。
比如,当数组长度不够。假设我们指定了数组长度,如:
char str1[13]={"www.baidu.com"};
由于字符数组str1的长度为13,所以后面的信息会“溢出”,即'\0'存到字符数组str1以外的地方去了,这是很危险的。
另外,如果在给数组赋值时,把每个字符单独用引号括起来。可能会丢失'\0'。如:
char str1[]={'w','w','w','.','b','a','i','d','u','.','c','o','m'};这就只能以字符数组使用,不能用字符串使用了。
如果希望数组以'\0'结束,则要么写成:
char str1[]={"www.baidu.com"};
要么写成(人工添加'\0'):
char str1[]={'w','w','w','.','b','a','i','d','u','.','c','o','m','\0'};
要么写成(故意给数组预留一个字节的空位,由系统自动初始化为'\0'):
char str1[14]={'w','w','w','.','b','a','i','d','u','.','c','o','m'};
因为c语言中没有字符串类型,所以借助字符数组来存储字符串,为了区别字符串,需要在字符数组的末尾添加ASCII为0,即'\0',来作为字符串的结束标志,并且不计入字符串长度。
例如:
#include<stdio.h>
#include<string.h>
int main()
{
char a[10]="hello",b[10]={'h','e','l','l','o'};
printf("%d,%d
",strlen(a),strlen(b));//长度都是5,
puts(a);//a是字符串可以使用puts输出。
return 0;
}
/*运行结果:
5,5
hello
*/
字符串是借助于字符型一维数组来存放的,'\0'ASCLL代码值为0,它作为标志占用存储空间但不记入串的实际长度,所以用来作为字符串的结束标志
不是以0做为结尾,而是当字符串在存储的时候,会自动在最后面加上一个串结束符'/0',这不是我们通常认为的O,而是一个串结束符,是一个固定的符号,每个字符串在存储的时候都会自动加上的.
c语言中string是什么意思(C语言string是什么数据类型)
C++标准库中string类以类型的形式对字符串进行封装,且包含了字符序列的处理操作。c语言为什么要加个string string是一个库的名字,如果你需要用到这个库里面的函数,就需要#include,里面含有的函数比较多,在调用时,每个函数都有各自的格式,一般在c语言课本后面的附录中都有介绍的。编程语言中的字符串...
c语言中为什么字符串"hello"在内存中占六个字节?
因为计算器在计算这个字符串的时候。它要知道什么时候开始什么时候结束,否者就会一直计算下去。开始在说明字符串就确定了,结束呢?计算器必须有个结束的方法。就是在末尾加上‘\\0’。c语言运算符号指的是运算符号。C语言中的符号分为10类:算术运算符、关系运算符、逻辑运算符、位操作运算符、赋值运算...
为什么C语言不能像c++一样直接操作字符串?
C语言中字符串与一般字符数组的最大区别在于:字符串常量的最后由系统加上一个'\\0',而字符数组不会添加。字符串能通过scanf()、printf()等函数进行整体的读写。C语言中没有字符串类型,字符串是存放在字符型数组中的。在C语言中,是将字符串作为字符数组来处理的。为了测定字符串的实际长度,C语言...
为什么c语言中\\0是字符串的结束?
\\0' 在c语言中是字符串的结束符,C语言标准库中对字符串的处理都会以\\0作为字符串结束标志,任何字符串之后都会自动加上'\\0'。'\\0'的意思是 ASCII 码为 0 的字符,对应的字符是(Null),表示“字符串结束符”,是字符串结束的标志。字符串常量占的内存字节数等于字符串中字节数加1。增加的一...
c语言中,单引号的是字符,双引号的是字符串吗?
2、字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的。它是编程语言中表示文本的数据类型。在程序设计中,字符串(string)为符号或数值的一个连续序列,如符号串(一串字符)或二进制数字串(一串二进制数字)...
为什么c语言中字符串输入的长度会超过我定义的字符数组?
因为你输入的本来就超过了 C语言中的字符串是不会给你做边界检查的,说白了char a[3] 这种只是说“假设”a字符串不超过2个字符(最后一个要给\\0) , 但实际上你即使超限了,他也不会管你,但他会影响到(例如覆盖)其他的数据,也有可能出现运行时错误 ...
c语言,字符串,最后面为什么会有一个"烫"字。
因为你没有给字符串置结束符,所以,把内存中的随机值按字符输出来了 puts(a)表示输出字符串a。a是字符串首地址,puts从首地址开始输出,直到遇到\\0结束输出 你在for(){ }循环之后,加一句:a[i]='\\0';这样就好了。当然,你要存储26个字符,所以,字符串定义数组时,要比实际的存储字符多一个...
C语言字符串中\\t为什么是四个空格
\\t是制表符,输入时键盘左上角数字键下一排第一个就是(Tab)。一个\\t到底是几个空格是可以由使用者设置的,一般系统默认的是4个空格。比如在VC++6.0的集成环境下,要把默认的4个空格改成2个的话可以这样操作——点击“工具”按钮→在弹出的下拉菜单中单击“选择...”按钮→在弹出的对话框中“...
c语言为什么要用字符串?不是有字符数组了吗
效果是一样的,只不过数组这种类型支持字符数组而已,原来设计是为了处理其他数组问题,一般处理字符还是用字符串,因为他们在内存中存储模式是一样的,没有区别,所以只是一个问题的两种说法!呵呵,不知道我的答案你满意吗?
c语言中为什么字符串"ab'1'\\\\\\12703"的长度是9,而"ab'1'\\\\\\12803"的...
首先 ab, '1'都是确定的,注意,两个单引号也是字符啊, 然后是一个转义字符\\,它表示后面的第二个\\是一个字符,然后第三个\\又是个转义字符,后面跟着的是ASCII码的3位八进制的值,127转换成十进制就是87,也就是对应的字符'W',再加上后面的0, 3, 所以是9位;而第二个,因为第三个\\...
施勇益脉: '\0'一般放在字符串的结束处,表示字符串的结束,其是ascii值为0的字符的转义. 在头文件#include <string.h>中包含的一些字符串处理函数等中,一般处理字符串时,都是一'\0'作为字符串的结束,如果一个字符串中没有'\0'这个结束字符,那么这些函数将不能确定字符串的结束位置在哪儿,从而引起一些不必要的错误.
罗山县13339226624: /0在c语言中是什么意思??
施勇益脉: “\0”在c语言中代表“字符串结束符”.“\0”的ASCII码为“0”,也就是空字符;字符串总是以“\0”作为串的结束符;因此当把一个字符串存入一个数组时,也把结束...
罗山县13339226624: c语言中字符串为什么最后要加个0'?
施勇益脉: 字符串竣事符. 暗示字符串竣事. 跟'\n'暗示换行,差不多.
罗山县13339226624: c语言中用\0做字符串结束标志 \0为什么不用\000表示 - ?
施勇益脉: \000明显就是\0的三位八进制,所以是一样的\00就要看后面的一位是不是数字,如果是数字也是三位八进制表示法,如果不是数字那\0就是结束标志了
罗山县13339226624: c语言中字符串为什么最后要加个0' - ?
施勇益脉: 暗示字符串竣事,在输出的时辰输出到这里为止,你可以试一下在字符串中心插手\0 再输出,就只会输出\0前面的内容.
罗山县13339226624: C语言中!='\0' 是什么意思 - ?
施勇益脉: 字符串都是以'\0'结束的,如 char str[6]="Hello"; 而在内存中则是"Hello\0" 即你申请了6个空间,但只能用5个,最后一个用来放'\0'.表示字符串结束. 例如下面一个查找str末尾的程序 while(*str != '\0') { str++; } 有时也可以把'\0'直接放在字符串末尾,用来表示该字符串结束.如: char str[10]; for(i=0;i<5;i++){ *str=(char)getchar(); str++; } str='\0'; 希望对你有用
罗山县13339226624: c语言中\0表示什么?
施勇益脉: 字符串结束符(也叫空字符,其值为0)可以标记字符串的结束,例如”char pattern[] ={'o','a','b','c'};“,数组的长度是5(4个字符加上一个字符串结束符'\0').因为字符串常量就相当于是字符数组. 字符串的内部表示使用一个空字符'\0'作为字符串的结尾,所以,程序可以通过检查空字符找到字符数组(字符串)的结尾. 空字符'\0',不是普通文本的一部分,是不显示的.
罗山县13339226624: C语言中\0是什么意思 - ?
施勇益脉: 他是字符串的结束标志,遇到\0就表示该字符串已经结束了,他的ASCII码值为0
罗山县13339226624: C语言中 \0 代表什么? - ?
施勇益脉: \0代表字符数串的结束标志 也就是字符数组的最后一位加上的'\0' \0的ASCII码为0,也就是空字符 上面的就是从字符数组的开始读取,直到最后字符串结束标志'\0'. 字符串总是以'\0'作为串的结束符.因此当把一个字符串存入一个数组时,也把结...
罗山县13339226624: C语言中'\0'代表什么意思? - ?
施勇益脉: ... '\0'的意思是 ASCII 为 0 的字符. 它所的意义是“字符串结束符”. 比如,一个字符串 "Hello" ,它是由字符 'H','e','l','l','o','\0' 6 个字符在内存中连续存放的.程序在见到第一个 '\0' 时就会认为该字符串结束了. 楼上的楼上所说的 “NULL” 只是一个用来表示空指针的宏定义,跟这个没有太大关系.虽然 (NULL == '\0') 这个表达式返回的是“真”,但这两个东西完全不是一个意义.