C语言中字符串结束符'\0'
本质
'\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'结束,则可以写成以下三者之一:
- u8 str1[]={"cxjr.21ic.org"}; //字符串赋值
- u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g','\0'}; //人工添加
- 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'相关推荐
- C语言中字符串结束符
C语言中字符串结束符'\0' '\0'就是8位的00000000,为字符NULL,因为字符类型中并没有对应的这个字符,所以这么写.'\0'就是字符串结束标志. 1. 字符串变量str[] 在C语言中没 ...
- C语言中的结束符‘\0‘
C语言中的结束符'\0' '\0'是C语言中的字符串结束标志.它的十进制输出:0,字符型输出:空字符(什么都没有,空空如也). (C语言中字符串是用英文输入法的双引号括起来,而字符是用英文输入法的单引 ...
- C语言: 字符串结束符 ‘ \0 ’
1.本质 '\0'是字符串结束标志,不计入串长,但要占内存空间. '\0'是一个ASCII控制字符,是转义字符.意思是告诉编译器,这不是字符0,而是空字符.空字符\0对应的二进制为0000 0000, ...
- c语言字符串转成二进制,C语言中字符串如何转换为二进制、八进制、十进制、十六进制...
在C语言某个程序当中需要把文本16进制转换成对应的16进制数,比如字符串"0x1a"转换成10进制的26,可以用以下函数来实现 相关函数: atof, atoi, atol, st ...
- C语言学习笔记——字符串结束符\0
C语言中的字符串结束符\0标志着字符串的结束,由编译器自己加上的,ASCII值为0,表示NULL,ASCII中有很多不可见字符由转义字符\和可见字符来标识的,当然可见字符也能用转义字符表示.
- C#与U3D中字符串尾0
C#与U3D中字符串尾0 static void TestChar0(){//注意字符串中0和\0的区别,如 s1="h0ello", s2 = "h\0ello&quo ...
- C语言中字符串和字符数组的区别
C语言中字符串和字符数组的区别 1.基本概念 2.代码分析 3.总结 1.基本概念 字符串和字符数组很相似,但是有本质上的区别. (1) C语言中,字符串是双引号括起来的单个或多个字符的集合,编译器自 ...
- C语言中字符串相关的拷贝函数
C语言下字符串拷贝函数汇总对比 1.1.strcpy 函数原型char *strcpy(char *dest, const char *src) 需要注意的是如果目标数组 dest 不够大,而源字符串 ...
- c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题
代码 总结下c语言中字符串数组的地址存放问题 #include <iostream> using namespace std; #include<bits/stdc++.h>i ...
最新文章
- Go 学习笔记(5)— 算术运算符、关系运算符、逻辑运算符、位运算符、赋值运算符、取地址和指针运算符
- 北斗时钟在国内各行业的应用前景
- 如何选择一线城市和二线城市?
- 比特币现金的一年回顾
- redis分布式锁实现原理_redis分布式锁实现分析与实践
- Hibernate基于JDBC的批量删除
- java 字节输入流_JavaIO流(一)-字节输入流与字符输入流
- 重新认识Docker Compose之Sidecar模式
- php ord函数 中文,php ord 函数与中文乱码解决方法_PHP教程
- 物理层协议有哪四大特性
- 黄金分割小数点后100位小数的c语言编程,黄金分割数小数点后100位
- 3个阶段 项目征名_3个月!签约亿元以上项目66个
- 前端Swiper滑动的时候最右一个反弹回去了
- 按键精灵大漠找字FindStrFast 函数封装
- 关于MySql中explain结果filtered的理解
- go 并发goroutines,channal
- VUE项目保存照片到本地(微信环境不可行)
- 【强化学习】悬崖寻路:Sarsa和Q-Learning
- 问题1053:素数回文
- 推荐6款高效率PDF编辑工具