RayGroup Inc

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1030 | 回复: 4

关于C语言中转义字符'\0'与空格' '区别的探究

[复制链接]

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
发表于 2021-12-5 16:34:03 | 显示全部楼层 |阅读模式
关于C语言中转义字符'\0'与空格' '区别的探究

前提

我们知道,在定义字符数组时
//定义字符数组ch
char ch[4]={"abc"};

由于字符串的的末位以转义字符'\0'作为字符串结束的标志

而'\0'在用户定义字符数组时被编译系统默认加在字符串的末位,占用一个内存空间,并且转义字符对我们用户而言不可见

所以如果要存放一个字符串长度为3的字符串时,至少需要将该字符数组长度定义为4

事实上,该字符数组共有4个内存空间,其实际存放数据为:

'a''b''c''\0'



为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2021-12-5 18:13:20 | 显示全部楼层
参考定义

事实上,在ASCII表中:

字符ASCII值
转义字符'\0'0
空格'  '32

可见  

即使转义字符'\0'  与 空格字符'   ' 在用户看来,其展现形式均为空格

但其在程序中仍是完全不同的两个字符,在判断时需要特别注意



为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2021-12-5 18:13:58 | 显示全部楼层
实际用法I

字符串输入空格

若以scanf语句输入字符串时,字符串不能含有空格'   ',否则scanf语句会以第一个空格作为该字符串的结束符

例如:
char ch[20];
scanf("%s",&ch);
printf("%s",ch);

此时若输入字符串"I have an apple."

输出结果则为

事实上,此时scanf语句将第一个空格'   '作为字符串结束符,因此仅读入了字符串"I have an apple."第一个空格前的数据'I'

为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2021-12-5 18:17:26 | 显示全部楼层
实际用法 II

字符串输入空格

若以gets()函数输入字符串,则gets(ch)读入一串以回车结束的字符,顺序存入到以ch为首地址的内存单元中,最后写入字符串的结束标志——转义字符'\0'

同样的,在输出字符串时,需要调用puts()函数,输出时直到遇到'\0'为止,最后输出一个换行符

例如:
char ch[];
gets(ch);
puts(ch);

此时若输入字符串"I have an apple."

输出结果则为
I have an apple.
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2021-12-5 18:22:27 | 显示全部楼层
实际用法 III

判断字符串中的空格

  • 若判断字符串"I\0have\0an\0apple."中的空格,则需要判断字符是否等于’\0’
  • 若果判断字符串"I have an apple."中的空格,则需要判断字符是否等于 ’  ’



为灵感而生,让创作自如。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-20 10:56 Processed in 0.037815 second(s), 19 queries .

© 2024 RayGroup Inc Powered by Discuz! X3.4 Theme by Jvmao 豫ICP备19036546号

快速回复 返回顶部 返回列表