数组关于\0的问题

前言

基础还不扎实,很多地方比较模糊,记录学习,可能会持续更新~

正文

一、区分 ‘\0’, ‘0’, “0”, 0
  • ’ \0’ 代表一个转义字符,它对应的ASCII编码值是0,是判定字符数组结束的标识,表示这串字符到结尾了,本质上就是0
  • ’0’ 代表字符0 ,对应ASCII码值为0x30 (也就是十进制 48)
  • “0’’ 代表一个字符串,字符串中含有 2个字符,分别是 ‘0’ 和 ‘\0’
  • 0 代表数字0,若把数字0赋值给某个字符,对应ASCII码值为0
二、数组中的’\0’

对于字符串后面是否要加入’\0’有几种情况。

1.char str[10] = “Hello”;

此时我们只给str数组前5个元素赋值,剩余5个元素系统将会自动赋值为’\0’,当赋值个数会小于数组长度时系统都会自动添加’\0’.
2.char str[5] = {‘h’,‘e’,‘l’,‘l’,‘o’};
此时str的长度刚好==字符串长度,此时系统将不会自动添加’\0’,如果数组长度大于字符串长度则会自动添加’\0’.
3.char str[] = {‘H’,‘e’,‘l’,‘l’,‘o’};
用此方法定义并初始化一个数组系统不会自动添加’\0’.
4.char str[] = "hello";
系统会自动在后面添加‘\0’(对比一下3)
注意char str[5]="hello"是错误的写法
因为在定义字符串时,系统会自动添加’\0’,但是数组长度 == 字符串长度,因此系统无法给字符串添加’\0’系统将会报错.
补充
如果用scanf来接收字符串的话,字符串中不能含有空格,否则将以空格作为串的结束符。如果你键入得是hello world 那么实际上scanf只能获取hello 这个单词。
所以要接收空格的话可以用gets()这个函数。gets(str)是读入一串以回车结束的字符,顺序存入到以str为首地址的内存单元中,最后写入字符串结束标志“\0 “,
同样在输出字符串时要用puts(),输出时直到遇到 \0 为止,最后输出一个换行符。
参考:https://blog.csdn.net/qq_43428547/article/details/88855099
参考:https://blog.csdn.net/tyyhmtyyhm/article/details/79113390

你可能感兴趣的:(C)