鱼C论坛

 找回密码
 立即注册
查看: 1959|回复: 8

[已解决]字符串判断什么时候用‘\0’ 什么时候用'\n'

[复制链接]
发表于 2019-12-7 15:23:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
字符串判断什么时候用 ‘\0’  什么时候用 '\n'

字符串是‘\0’和'\n'同时都有吗?有先后顺序吗?


while(scanf("%c",&s1),s1!='\n')
为什么这个是用 '\n' 不可以是 '\0'
我是以字符串一样的形式如 abcdef 这样输入的



for(i=0,j=0;p1!='\0';i++)
而这个则是' \0'
最佳答案
2019-12-7 16:00:40
本帖最后由 jackz007 于 2019-12-7 17:38 编辑

        '\0' 是法定的字符串结束标志,任何一个字符串的最后那个字符一定是 '\0',就是说,字符串尾部的 '\0' 是判断字符串结束的唯一标志。至于 '\n' 没有什么特别的,和一个普通字符并无任何区别,其位置既可以出现在字符串的开头,也可以出现在中间,当然也可以出现在尾部,其作用不过就是在显示字符串的时候,可以呈现出回车换行的效果。当然,如果是文本文件的话,其每一行内容的最后,都一定带有一个换行符 '\n',这也是分割文本文件的重要标志。当用 fgets() 函数从文本文件读出的时候,每个文本行的末尾字符也一定是 '\n'。当然,字符串结束标志肯定位于 '\n' 之后,否则的话,还怎么叫 "结束标志" 呢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-7 15:53:55 | 显示全部楼层
while(scanf("%c",&s1),s1!='\n')  //你输入一个字符串肯定是打回车符'\n'给电脑知道你输入完毕了,而'\0'是电脑
                                                 自动添加在字符串后面的一个结束标识符。
for(i=0,j=0;p1!='\0';i++)           //这个是遍历字符串中的字符,直到遇到结束符'\0'才跳出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-12-7 16:00:40 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-12-7 17:38 编辑

        '\0' 是法定的字符串结束标志,任何一个字符串的最后那个字符一定是 '\0',就是说,字符串尾部的 '\0' 是判断字符串结束的唯一标志。至于 '\n' 没有什么特别的,和一个普通字符并无任何区别,其位置既可以出现在字符串的开头,也可以出现在中间,当然也可以出现在尾部,其作用不过就是在显示字符串的时候,可以呈现出回车换行的效果。当然,如果是文本文件的话,其每一行内容的最后,都一定带有一个换行符 '\n',这也是分割文本文件的重要标志。当用 fgets() 函数从文本文件读出的时候,每个文本行的末尾字符也一定是 '\n'。当然,字符串结束标志肯定位于 '\n' 之后,否则的话,还怎么叫 "结束标志" 呢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-7 16:03:34 | 显示全部楼层
while(scanf("%c",&s1),s1!='\n')
这行代码是什么意思?当输入不是换行键就一直运行下去吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-7 20:03:49 | 显示全部楼层
北走、 发表于 2019-12-7 16:03
while(scanf("%c",&s1),s1!='\n')
这行代码是什么意思?当输入不是换行键就一直运行下去吗?

就是意思当你输入('\n')换行时表明你输入结束!!这时c语言会自动帮你加上字符串的结束符“\0”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-7 23:13:10 | 显示全部楼层
sanguine_boy 发表于 2019-12-7 15:53
while(scanf("%c",&s1),s1!='\n')  //你输入一个字符串肯定是打回车符'\n'给电脑知道你输入完毕了,而'\0'是 ...

我是以字符串一样的形式如 abcdef 这样输入的不会产生一个'\0'吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-7 23:15:57 | 显示全部楼层
那我是以字符串一样的形式如 abcdef 这样输入的,以 s1!='\0' 判断为什么就不行了??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 10:24:18 | 显示全部楼层
Aseeker 发表于 2019-12-7 23:15
那我是以字符串一样的形式如 abcdef 这样输入的,以 s1!='\0' 判断为什么就不行了??

输入abcdef后要回车电脑才知道你输入完了,此时才在f后面添加'\0'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:15:39 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2019-12-8 12:28 编辑
Aseeker 发表于 2019-12-7 23:15
那我是以字符串一样的形式如 abcdef 这样输入的,以 s1!='\0' 判断为什么就不行了??

  1.       char a[] = {"abcdef"} ;
复制代码

        字符串 a 的长度为 6,作为字符数组,a 的总容量却是 7 个字节,因为除了 6 个字符外,还需要 1 个额外的字节空间,用于保存结束标志字符 '\0'。正常的字符串比较,结束标志并不纳入比较范围,如果想判断,表达式 (a[6] == '\0') 的值一定是 true。
        字符 '\0' 永远不可能通过键盘输入得到,而是在字符串输入结束的时候,由操作系统附加到字符串末尾的,所以,键盘输入过程中的任何一个字符都不可能是 '\0' ,表达式:
  1.         (s1 != '\0')
复制代码

        所表达的条件永远成立。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 23:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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