为什么不是像\ a,\ v这样的标准转义序列?为什么'没有\就可以工作,而且是\?标准?

时间:2013-05-18 13:17:08

标签: c escaping

为什么\a(哔),\v(垂直标签)在我的程序中不起作用,即使它们是标准的,根据下面的链接?为什么单个引号也能正常工作?不使用\'?最后,\?是微软网站所说的转义字符,因为我在printf()格式字符串中使用了符号而没有\它工作正常。

要清楚说明:

  • 为什么\a\v无效?

  • 为什么单引号在没有\的情况下工作,即使\'是转义序列?

  • \?是否为转义序列?(链接说明了但在没有\的情况下工作)

http://msdn.microsoft.com/en-us/library/h21280bw(v=vs.80).aspx http://en.wikipedia.org/wiki/Escape_sequences_in_C

2 个答案:

答案 0 :(得分:2)

  
      
  • 为什么\a\v无效?
  •   

因为您使用的控制台不支持它们。编译器会在输出中生成正确的字符代码,但终端仿真器会忽略它们。

  
      
  • 为什么单引号在没有\的情况下工作,即使\'是转义序列?
  •   

因为没有必要在字符串中转义它,所以只需要在char字面值中转义它。 \"文字的string相同:

  • "'"'\''
  • '"'"\""
  
      
  • \?是转义序列吗? (链接说明了但?没有\
  •   

该链接实际上说的是不同的东西:

  

请注意...... \?指定文字问号,如果字符序列被错误解释为三字母

只有在以下字符形成有效三字符的情况下才能避免歧义,例如??=(这是#的三字母)。如果要在字符串中使用此序列,则需要转义第一个(或第二个)?

答案 1 :(得分:0)

某些转义序列是特定于设备的。因此,它们不能在每个设备上产生所需的效果。例如,垂直制表符(\v)和换页符(\f)转义序列不会影响屏幕输出。但他们确实执行了适当的打印机操作。