本质

'\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。'\0'就是 字符串结束标志。

'\0'是转义字符,意思是告诉编译器,这不是字符0,而是空字符。空字符\0对应的二进制为00000000,而数字0为00110000

原来,在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'}; //故意给数组预留一个空位

程序例证

#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;int main()
{char s[] = "10";printf("%s\n", s);printf("s[1]:%d\n", s[1]);printf("s[2]:%d\n", s[2]);printf("s[1]:%c\n", s[1]);printf("s[2]:%c\n", s[2]);char u[] = {"hello"};cout << sizeof(u) / sizeof(*u) << endl;char v[] = "hello";cout << sizeof(v) / sizeof(*v) << endl;
}

结果

转载于:https://www.cnblogs.com/jiangxiaobo/p/11178535.html

C语言中字符串结束符'\0'相关推荐

  1. C语言中字符串结束符

    C语言中字符串结束符'\0' '\0'就是8位的00000000,为字符NULL,因为字符类型中并没有对应的这个字符,所以这么写.'\0'就是字符串结束标志. 1. 字符串变量str[] 在C语言中没 ...

  2. C语言中的结束符‘\0‘

    C语言中的结束符'\0' '\0'是C语言中的字符串结束标志.它的十进制输出:0,字符型输出:空字符(什么都没有,空空如也). (C语言中字符串是用英文输入法的双引号括起来,而字符是用英文输入法的单引 ...

  3. C语言: 字符串结束符 ‘ \0 ’

    1.本质 '\0'是字符串结束标志,不计入串长,但要占内存空间. '\0'是一个ASCII控制字符,是转义字符.意思是告诉编译器,这不是字符0,而是空字符.空字符\0对应的二进制为0000 0000, ...

  4. c语言字符串转成二进制,C语言中字符串如何转换为二进制、八进制、十进制、十六进制...

    在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, st ...

  5. C语言学习笔记——字符串结束符\0

    C语言中的字符串结束符\0标志着字符串的结束,由编译器自己加上的,ASCII值为0,表示NULL,ASCII中有很多不可见字符由转义字符\和可见字符来标识的,当然可见字符也能用转义字符表示.

  6. C#与U3D中字符串尾0

    C#与U3D中字符串尾0 static void TestChar0(){//注意字符串中0和\0的区别,如 s1="h0ello", s2 = "h\0ello&quo ...

  7. C语言中字符串和字符数组的区别

    C语言中字符串和字符数组的区别 1.基本概念 2.代码分析 3.总结 1.基本概念 字符串和字符数组很相似,但是有本质上的区别. (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自 ...

  8. C语言中字符串相关的拷贝函数

    C语言下字符串拷贝函数汇总对比 1.1.strcpy 函数原型char *strcpy(char *dest, const char *src) 需要注意的是如果目标数组 dest 不够大,而源字符串 ...

  9. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题

    代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...

最新文章

  1. Go 学习笔记(5)— 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符
  2. 北斗时钟在国内各行业的应用前景
  3. 如何选择一线城市和二线城市?
  4. 比特币现金的一年回顾
  5. redis分布式锁实现原理_redis分布式锁实现分析与实践
  6. Hibernate基于JDBC的批量删除
  7. java 字节输入流_JavaIO流(一)-字节输入流与字符输入流
  8. 重新认识Docker Compose之Sidecar模式
  9. php ord函数 中文,php ord 函数与中文乱码解决方法_PHP教程
  10. 物理层协议有哪四大特性
  11. 黄金分割小数点后100位小数的c语言编程,黄金分割数小数点后100位
  12. 3个阶段 项目征名_3个月!签约亿元以上项目66个
  13. 前端Swiper滑动的时候最右一个反弹回去了
  14. 按键精灵大漠找字FindStrFast 函数封装
  15. 关于MySql中explain结果filtered的理解
  16. go 并发goroutines,channal
  17. VUE项目保存照片到本地(微信环境不可行)
  18. 【强化学习】悬崖寻路:Sarsa和Q-Learning
  19. 问题1053:素数回文
  20. 推荐6款高效率PDF编辑工具

热门文章

  1. 关于将银河麒麟系统部署在云平台上面命令无法使用的问题
  2. stc12c5a60s2驱动TEA5767收音机模块硬件调试总结
  3. SNS能否成为“人脉搜索”的平台
  4. 2020年 萧子山致读者的一封信
  5. 使用vs2008c++语言开发activex控件教程,使用VS2008C_开发ActiveX控件.pdf
  6. linux usb 摄像头测试软件
  7. 山东标梵分享这些小程序开发干货让你不在犹豫
  8. EasyExcel 官网观看建议
  9. HIVE日期函数大全
  10. java字符串整齐输出