首页 > 其他分享 >C语言中字符串结束符'\0'的讨论

C语言中字符串结束符'\0'的讨论

时间:2022-09-30 10:03:50浏览次数:49  
标签:字符 u8 str1 C语言 数组 结束符 字符串 长度


'\0'就是8位的00000000,因为字符类型中并没有对应的这个字符,所以这么写。在数值类型里就代表数字0。

数值类型存储时,最高位决定正负号,其他位都为0可不就是0了么?

'\0'是转译字符,意思是告诉程序,这不是字符0,我要的是数字0的2进制直接放进来,因为acsii码的0可不是00000000


原来,在C语言中没有专门的字符串变量,通常用一个字符数组来存放一个字符串。字符串总是以'\0'作为串的结束符。因此当把一个字符串存入一个数组时,也把结束符 '\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'也一同拷贝。 

但是……也有一些例外情况发生。
比如,当数组长度不够。假设我们指定了数组长度,如:
u8 str1[13]={"cxjr.21ic.org"};
由于字符组str1的长度为13,所以后面的信息会丢失,即'\0'丢失。

另外,如果在给数组赋值时,把每个字符单独用引号括起来。也会丢失'\0'。如:
u8 str1[]={'c','x','j','r','.','2','1','i','c','.','o','r','g'};
如果希望数组以'\0'结束,则要么写成:
u8 str1[]={"cxjr.21ic.org"};
要么写成(人工添加'\0'):
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'};

标签:字符,u8,str1,C语言,数组,结束符,字符串,长度
From: https://blog.51cto.com/u_15812463/5724697

相关文章

  • js中拼接字符串作为变量名后赋值
    js中有业务场景需要生成很多的变量,但是变量的名称是根据参数的不同而区分的。一般情况下我们会构建一个数组,然后通过数组下标的形式来操作。 意外发现一个方法可......
  • 第十组 chap1-2学习总结——对c语言的第一印象
    博客内容概括:一,引言。二,学习内容梳理。三,课后习题中的问题及解决历程。四,小结。 一,引言 经过两周的线上小组学习,让对编程的第一印象只停留在黑客电影和科幻片的......
  • 算法练习-第八天【字符串】
    字符串344.反转字符串参考:代码随想录344.反转字符串思考题目要求在原地反转字符串,既然是原地反转那么可以第一时间想到双指针,一个指针指向头部,一个指向尾部,互换元素。......
  • linux 中如何输出包含指定字符串的单词
     001、[root@PC1test]#lsa.txt[root@PC1test]#cata.txt##测试文件243fsab989a34bsa1113ab34df3addgabekkkkabk[roo......
  • 【模板】BM字符串匹配
    据说效率是KMP的\(3\sim4\)倍。主要利用坏字符和好后缀进行跳转来避免过多的匹配。这篇博客讲的很好,推荐大家看看。#include<iostream>#include<vector>#incl......
  • Leetcode 字符串轮转 KMP
    解题思路题面两倍s1变成字符串匹配,用KMP。KMP预先处理模式串(短串)的\(next[]\)数组,\(next[]\)的意思为自我匹配一样的值的下一个的位置。复杂度\(O(n)\)代码classSo......
  • C#中对象与JSON字符串互相转换的三种方式
    JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式。关于内存对象和JSON字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种方法......
  • C语言实现顺序栈、单链栈、双向链栈
    #defineMaxlength8/***数据结构类型:顺序栈*插入方法:尾插法*是否有头节点:否*说明:在主函数直接定义一个结构体节点,取地址作形参,避免使用malloc函数而考虑二......
  • 初探c语言第一天
    1.库函数和用户函数​库函数用户函数需要自己根据需要设定()中放置变量2.存放变量和常量需要定义inta=变量  constintA=常量​​3.scanf一定要打&     ......
  • 【C语言_9】快速掌握分支结构!
    1.分支结构的标准公式//单条语句if(测试条件)条件为真所执行的语句else条件为假所执行的语句//多条语句if(测试条件){条件为真所执行的流程}else{条件为假......