| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1136 人关注过本帖
标题:求助,关于转义字符
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你再看看4楼给的资料(其实应该看书),转义字符哪有使用两位数字的?

你的编译器给你在40前面自作聪明补上一个0,成为040,然后认作八进制,那是这个编译器自己的事,你不要当这样写是没问题的。

[ 本帖最后由 TonyDeng 于 2012-11-2 16:51 编辑 ]

授人以渔,不授人以鱼。
2012-11-02 16:49
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
版主,你越说我越糊涂了,看来要先把指针缓一缓,先研究这个type了。
昨天还为写成了一个小程序而沾沾自喜,今天就发现自己如此无知,要靠翻书才能听懂别人的话,甚至还理解错了,郁闷纠结,无奈,无语。。。。。。。。。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-02 17:29
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
回复 11楼 TonyDeng
版主,请原谅,我是自学C,一切全靠自悟,所以所问的问题可能有点低能
是不是这个意思,转义字符后面跟的八进制字符都用三位数,我原理看到的那个程序,\40的写法是错误的,应该是\040 ,而你所说的可type是不是指%c这种形式?至于你说的只是圆括号用不着转义字符是不是说有时候程序太复杂为避免出现错误才用转义字符后面加八进制数的情况

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-02 18:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你看的书上难道没有写什么叫转义字符、为什么使用转义字符的内容?把那部分内容抄出来看看,我看为什么你会不了解这东西。没恶意,只是想知道你看的书到底写的如何。

授人以渔,不授人以鱼。
2012-11-02 19:04
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
谭浩强著
转义字符
除了以上形式的字符外C还允许用一种特殊形式的字符量,就是以字符\卡头的字符序列。例如,前面已经遇到过的,在printf函数中的‘\n’它代表“换行”符。‘\t’代表将输出的位置跳到下一个tab位置(制表位置),一个tab位置为8列。这是一种在屏幕上无法显示的“控制字符”,在程序中也无法用一个一般形式的字符来表示,只能采用这样的特殊形式来表示。
    常用的以“\”开头的特殊字符见表3.1.
                       表3.1  转义字符及其作用
转义字符                        输出结果
\'          一个单撇号(‘)     具有此八进制码的字符
\“         一个双撇号(”)     输出此字符
\?         一个问号(?)       输出此字符
\\          一个反斜线(\)      输出此字符
\a          警告(alert)        产生声音或视觉信号
\b          退格(backspace)    将当前位置后退一个字符
\f          换页(form feed)    将当前位置移到下一页的开头
\n          换行                 将当前位置移到下一行的开头
\r          回城(carriage return) 将当前位置移到笨行的开头
\t          水平制表符            将当前位置移到下一个tab位置
\v          垂直制表符           将当前位置移到下一个垂直制表对齐点
\0\00\000     与该八进制字符     
其中0代表一个 对应的ASCII字符      与该八进制码对应的字符
八进制数字
\xh[h...]其中  与该十六进制码对应  与该十六进制码对应的字符
h代表一个十六  的ASCII字符
进制数字
  表3.1列出的字符称为“转义字符”,意思是将“\”后面的字符转换成另外的意义。如“\n
”中的“n”不代表字母n而作为“换行”符。
  表3.1中倒数第2行是一个以八进制数表示的字符,例如’\101’代表八进制数101的ASCII字符,即‘A’,(八进制数101相当于十进制数65,从附录B可以看到ASCII码(十进制数)为65的字符是大写字母‘A’)。‘\012’代表八进制数12(即十进制数的10)的ASCII码所对应的字符“换行”符。表3.1中倒数第1行是一个以十六进制数表示的ASCII字符,如‘\x41’代表十六进制数41的ASCII字符,也是‘A’(十六进制数41相当于十进制数65)。用表3.1中的方法可以表示如何可显示的字母字符、数字字符、专用字符图形字符和控制字符。如‘\033’或‘\x1B’代表ASCII代码为27的字符,即ESC控制符。‘\0’或‘\000’是代表ASCII码为0的控制字符,即“空操作”字符,它常用在字符串中。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-02 23:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
看到这个了吗?
这是一种在屏幕上无法显示的“控制字符”,在程序中也无法用一个一般形式的字符来表示,只能采用这样的特殊形式来表示。


能够显示(打印)的字符,才是“可打印字符”,英文称之为type,源自打字机。只有需要使用这种字符的时候,才考虑使用转义形式。在C语言中,有些即使是可打印字符,由于语言本身需要,也可能禁止程序员在代码中直接使用,也应用转义形式,比如单引号和双引号,在字符串中要嵌套这些符号,可能会让编译器以为字符串提前结束,于是规定程序员写成转义字符,以免编译器误解。转义字符是在这种情景下用的。

授人以渔,不授人以鱼。
2012-11-02 23:43
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
用手敲了一遍,边敲边琢磨,懂了一些,可有的地方还糊涂
比如表格倒数第2行\00也代表八进制数字那么我原来看的那个程序里\40的写法岂不是正确的,系统没必要补成\040啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-02 23:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
八进制字符要求0开头,这是编译器判断数值是八进制表示法的约定。\40并非0开头,这是约定之外的写法。你那个编译器,发现这种不规范的写法,就自己凑,找到一种看似合理的解释就当是那种。它干嘛不认为是\x40?如果程序员本来确是想写十六进制呢?你用\49甚至\4A、\4k……试试

[ 本帖最后由 TonyDeng 于 2012-11-3 00:00 编辑 ]

授人以渔,不授人以鱼。
2012-11-02 23:59
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
不知道这样理解对不对:
\40很不好理解,可能是八进制的\040少了开头的0,也可以是十六进制的\x40少了开头的x,但不管怎么哪种情况都少了标致性的字符,也就是说理解成八进制和十六进制都不和法,但是十进制又没有在前面加'\'的,所以我用的编译系统就“联想”了一种看似合理的解释。可能这也正是那段程序编写者有意为之,所以那段代码执行之后看不出异样。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-03 00:07
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
三个小代码‘\40’纠结了一个下午加一晚上,总算弄明白了,顺带还弄明白了转义字符,二进制,八进制,十进制,十六进制之间的关系和如何转换,算是实惠多多了.
谢谢版主和4楼的兄弟,晚安。

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2012-11-03 00:13
快速回复:求助,关于转义字符
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017001 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved