C语言,字符串中,溢出字符(ASCII码=27)怎样处理?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,字符串中,溢出字符(ASCII码=27)怎样处理?相关的知识,希望对你有一定的参考价值。
linux环境,代码如下(图中黄色方框的字符'^[',为溢出字符,ASCII码=27)
程序运行结果如图
为何第15行printf没有将s[0]中保存的'a'打印出来?
且若不注释12,13行代码,第15行printf的输出为"abc23".
求教,字符串中的溢出字符到底有何作用?
环境:
Linux version 2.6.32-279.el6.x86_64 (mockbuild@x86-008.build.bos.redhat.com) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) )
我在win7和ubuntu上用你的代码跑的时候,"^["都是被当做两个字符处理的。
然后在win7和ubuntu上测试了,"^[“应该是指输入时按”Ctrl+[“表示输入27号字符。
win7:
ubuntu:
然后,把sprintf改成sprintf(s, "%s%c", p, 27);
win7:
ubuntu:
最后,我并不知道ESC有什么卵用..
追问辛苦了.
1,把'^['当做一个字符输入,在vim中可以在insert模式下,按Ctrl+v后,再按Esc键即可.
2,这个符号在我的电脑上跑的时候,确实影响了printf的输出结果,但我不清楚这是编译器导致的还是系统环境导致的.
3,谢谢您的帮助,如果今天22:00前,没有收到更详细的答案的话,我会采纳这条回答.
能说一下系统环境么?谢谢.
还有,能不能把代码和结果的图贴出来.
字符Escape,是ASCII标准的首创的,由Bob Bemer提议的。用于开始一段控制码的扩展字符。如此,即可以不必将所有可能想得到的字符都放到ASCII标准中了。
因为,新的技术可能需要新的控制命令,而ESC可以用作这些字符命令的起始标志。
也就是说,并没有什么用。你的问题不是因为这个字符而导致的,很多编译器会做一定的优化,比如说上面两位朋友编译出来的结果就完全不同一样,我在gcc编译器下面也试了一下,也没有能检测到这个字符。
所以,如果不是非常必要的话,你可以放弃对这个字符的研究了!本回答被提问者采纳
c语言字符ASCLL码顺序
如‘D’的ASCLL为68,那么‘D’+9的字符为?能讲讲怎么弄的吗?我不会…谢谢
ASCII码大致可以分作三部分组成。
第一部分是:ASCII非打印控制字符;
第二部分是:ASCII打印字符;
第三部分是:扩展ASCII打印字符。
第一部分:ASCII非打印控制字符表
ASCII表上的数字0–31分配给了控制字符,用于控制像打印机等一些外围设备。例如,12代表换页/新页功能。此命令指示打印机跳到下一页的开头。(参详ASCII码表中0-31)
第二部分:ASCII打印字符
数字 32–126 分配给了能在键盘上找到的字符,当您查看或打印文档时就会出现。数字127代表 DELETE 命令。(参详ASCII码表中32-127)
ASCII码表 0-127
Bin Dec Hex 缩写/字符 解释
00000000 0 00 NUL(null) 空字符
00000001 1 01 SOH(start of headling) 标题开始
00000010 2 02 STX (start of text) 正文开始
00000011 3 03 ETX (end of text) 正文结束
00000100 4 04 EOT (end of transmission) 传输结束
00000101 5 05 ENQ (enquiry) 请求
00000110 6 06 ACK (acknowledge) 收到通知
00000111 7 07 BEL (bell) 响铃
00001000 8 08 BS (backspace) 退格
00001001 9 09 HT (horizontal tab) 水平制表符
00001010 10 0A LF (NL line feed, new line) 换行键
00001011 11 0B VT (vertical tab) 垂直制表符
00001100 12 0C FF (NP form feed, new page) 换页键
00001101 13 0D CR (carriage return) 回车键
00001110 14 0E SO (shift out) 不用切换
00001111 15 0F SI (shift in) 启用切换
00010000 16 10 DLE (data link escape) 数据链路转义
00010001 17 11 DC1 (device control 1) 设备控制1
00010010 18 12 DC2 (device control 2) 设备控制2
00010011 19 13 DC3 (device control 3) 设备控制3
00010100 20 14 DC4 (device control 4) 设备控制4
00010101 21 15 NAK (negative acknowledge) 拒绝接收
00010110 22 16 SYN (synchronous idle) 同步空闲
00010111 23 17 ETB (end of trans. block) 传输块结束
00011000 24 18 CAN (cancel) 取消
00011001 25 19 EM (end of medium) 介质中断
00011010 26 1A SUB (substitute) 替补
00011011 27 1B ESC (escape) 溢出
00011100 28 1C FS (file separator) 文件分割符
00011101 29 1D GS (group separator) 分组符
00011110 30 1E RS (record separator) 记录分离符
00011111 31 1F US (unit separator) 单元分隔符
00100000 32 20 (space) 空格
00100001 33 21 !
00100010 34 22 "
00100011 35 23 #
00100100 36 24 $
00100101 37 25 %
00100110 38 26 &
00100111 39 27 '
00101000 40 28 (
00101001 41 29 )
00101010 42 2A *
00101011 43 2B +
00101100 44 2C ,
00101101 45 2D -
00101110 46 2E .
00101111 47 2F /
00110000 48 30 0
00110001 49 31 1
00110010 50 32 2
00110011 51 33 3
00110100 52 34 4
00110101 53 35 5
00110110 54 36 6
00110111 55 37 7
00111000 56 38 8
00111001 57 39 9
00111010 58 3A :
00111011 59 3B ;
00111100 60 3C <
00111101 61 3D =
00111110 62 3E >
00111111 63 3F ?
01000000 64 40 @
01000001 65 41 A
01000010 66 42 B
01000011 67 43 C
01000100 68 44 D
01000101 69 45 E
01000110 70 46 F
01000111 71 47 G
01001000 72 48 H
01001001 73 49 I
01001010 74 4A J
01001011 75 4B K
01001100 76 4C L
01001101 77 4D M
01001110 78 4E N
01001111 79 4F O
01010000 80 50 P
01010001 81 51 Q
01010010 82 52 R
01010011 83 53 S
01010100 84 54 T
01010101 85 55 U
01010110 86 56 V
01010111 87 57 W
01011000 88 58 X
01011001 89 59 Y
01011010 90 5A Z
01011011 91 5B [
01011100 92 5C \\
01011101 93 5D ]
01011110 94 5E ^
01011111 95 5F _
0110000 96 60 `
01100001 97 61 a
01100010 98 62 b
01100011 99 63 c
01100100 100 64 d
01100101 101 65 e
01100110 102 66 f
01100111 103 67 g
01101000 104 68 h
01101001 105 69 i
01101010 106 6A j
01101011 107 6B k
01101100 108 6C l
01101101 109 6D m
01101110 110 6E n
01101111 111 6F o
01110000 112 70 p
01110001 113 71 q
01110010 114 72 r
01110011 115 73 s
01110100 116 74 t
01110101 117 75 u
01110110 118 76 v
01110111 119 77 w
01111000 120 78 x
01111001 121 79 y
01111010 122 7A z
01111011 123 7B
01111100 124 7C |
01111101 125 7D
01111110 126 7E ~
01111111 127 7F DEL (delete) 删除
3. 第三部分:扩展ASCII打印字符
扩展的ASCII字符满足了对更多字符的需求。扩展的ASCII包含ASCII中已有的128个字 符(数字0–32显示在下图中),又增加了128个字符,总共是256个。即使有了这些更 多的字符,许多语言还是包含无法压缩到256个字符中的符号。因此,出现了一些 ASCII的变体来囊括地区性字符和符号。例如,许多软件程序把ASCII表(又称作 ISO8859-1)用于北美、西欧、澳大利亚和非洲的语言。
参考技术A D+9后 是 M小写字母的十进制数字表示范围:(起始是小写a)97~122
大写的范围是:(起始是大写A)61~86
你如果不懂这ascll 码排列方法,你去搜索一下,自己看看。我说不明白
参考资料:如果您的回答是从其他地方引用,请表明出处
本回答被提问者采纳以上是关于C语言,字符串中,溢出字符(ASCII码=27)怎样处理?的主要内容,如果未能解决你的问题,请参考以下文章