字符串文字中转义字符\
的规则是什么?是否有转义的所有字符的列表?
特别是,当我在gedit中的字符串文字中使用\
并按照任意三个数字跟随它时,它会以不同的方式对它们进行着色。
我尝试创建一个由文字构建的std::string
,其字符为0
,后跟空字符(\0
),后跟字符0
。但是,语法突出显示警告我,这可能会创建类似于字符0
后跟空字符(\00
,又名\0
)的东西,也就是说,只有两个字符。
对于这个问题的解决方案,这是最好的方法:
std::string ("0\0" "0", 3) // String concatenation
对于字符串文字中的转义字符一般有什么参考吗?例如什么是'\ a'?
答案 0 :(得分:58)
控制字符:
(十六进制代码假定与ASCII兼容的字符编码。)
\a
= \x07
=提醒(铃声)\b
= \x08
=退格\t
= \x09
=水平标签\n
= \x0A
=换行(或换行)\v
= \x0B
=垂直标签\f
= \x0C
=表单Feed \r
= \x0D
=回车\e
= \x1B
=转义(非标准GCC扩展名)标点字符:
\"
=引号('"'
不需要反斜杠)\'
=撇号("'"
不需要反斜杠)\?
=问号(用于避免三字母)\\
=反斜杠数字字符引用:
\
+最多3个八进制数字\x
+任意数量的十六进制数字\u
+ 4个十六进制数字(Unicode BMP,C ++ 11中的新增功能)\U
+ 8个十六进制数字(Unicode星体平面,C ++ 11中的新内容) \0
= \00
= \000
=八进制ecape为空字符
如果你想在\0
之后想要一个实际的数字字符,那么是的,我推荐字符串连接。请注意,文字部分之间的空格是可选的,因此您可以编写"\0""0"
。
答案 1 :(得分:4)
\a
是铃声/提示字符,在某些系统上触发声音。 \nnn
表示八进制基数中的任意ASCII字符。但是,\0
的特殊之处在于无论如何都代表空字符。
要回答原始问题,您也可以将'0'字符转义为:
std::string ("\060\000\060", 3);
(因为ASCII'0'是八进制的60)
MSDN documentation上有一篇非常详细的文章,cppreference
答案 2 :(得分:4)
\ 0将被解释为八进制转义序列,因此\ 00将被解释为单个字符。 (\ 0技术上也是一个八进制转义序列,至少在C中)。
你这样做的方式:
std::string ("0\0" "0", 3) // String concatenation
有效,因为此版本的构造函数采用char数组;如果您尝试将“0 \ 0”“0”作为常量字符*传递,它会将其视为C字符串,并且仅将所有内容复制到空字符。
答案 3 :(得分:1)
我留下这样的评论,但我觉得可能需要更多的可见性,因为没有一个答案提到这个方法:
我现在更喜欢使用非打印字符初始化std::string
的方法(特别是嵌入的空字符)是使用初始化列表的C ++ 11功能。
std::string const str({'\0', '6', '\a', 'H', '\t'});
我不需要对我正在使用的字符数进行容易出错的手动计数,所以如果以后我想在某处插入'\ 013',我可以和我的所有代码仍然有效。它还完全避免了意外使用错误转义序列的任何问题。
唯一的缺点是所有额外的'
和,
字符。
答案 4 :(得分:0)
借助用户定义的文字的魔力,我们还有另一个解决方案。 C ++ 14添加了一个std::string
文字运算符。
using namespace std::string_literals;
auto const x = "\0" "0"s;
构造一个长度为2的字符串,其中'\ 0'字符(null)后跟一个'0'字符(数字零)。我不确定它是否比initializer_list<char>
constructor approach更清晰,但它至少会删除'
和,
个字符。
答案 5 :(得分:0)
ascii
是Linux上的软件包,您可以下载。
例如
sudo apt-get install ascii
ascii
Usage: ascii [-dxohv] [-t] [char-alias...]
-t = one-line output -d = Decimal table -o = octal table -x = hex table
-h = This help screen -v = version information
Prints all aliases of an ASCII character. Args may be chars, C \-escapes,
English names, ^-escapes, ASCII mnemonics, or numerics in decimal/octal/hex.`
此代码可以帮助您使用C / C ++转义代码,例如\x0A