47

\字符串文字中转义字符的规则是什么?是否有所有转义字符的列表?

特别是,当我\在 gedit 中使用字符串文字并在其后跟任意三个数字时,它们的颜色会有所不同。

我试图创建一个std::string从文字构造的字符,0后跟空字符 ( \0),后跟字符0。但是,语法突出显示提醒我,这可能会创建类似于0后跟空字符 ( \00, aka \0) 的字符,也就是说,只有两个字符。

为了解决这个问题,这是最好的方法:

std::string ("0\0" "0", 3)  // String concatenation 

对于转义字符在字符串文字中的作用,是否有一些参考?例如,'\a' 是什么?

4

6 回答 6

82

控制字符:

(十六进制代码假定与 ASCII 兼容的字符编码。)

  • \a= \x07= 警报(铃声)
  • \b= \x08= 退格
  • \t= \x09= 水平制表符
  • \n= \x0A= 换行(或换行)
  • \v= \x0B= 垂直制表符
  • \f= \x0C= 换页
  • \r= \x0D= 回车
  • \e= \x1B= 转义(非标准 GCC 扩展)

标点符号:

  • \"= 引号(不需要反斜杠'"'
  • \'= 撇号(不需要反斜杠"'"
  • \?= 问号(用于避免三连音)
  • \\= 反斜杠

数字字符参考:

  • \+ 最多 3 个八进制数字
  • \x+ 任意数量的十六进制数字
  • \u+ 4 个十六进制数字(Unicode BMP,C++11 中的新功能)
  • \U+ 8 个十六进制数字(Unicode 星体平面,C++11 中的新功能)

\0= \00= \000= 空字符的八进制转义符

如果您确实想要 a 之后的实际数字字符\0,那么是的,我建议使用字符串连接。请注意,文字部分之间的空格是可选的,因此您可以编写"\0""0".

于 2012-04-19T01:43:08.677 回答
4

\a是铃声/警报字符,在某些系统上会触发声音。\nnn, 表示以八进制为基数的任意 ASCII 字符。但是,\0它的特殊之处在于它无论如何都表示空字符。

要回答您的原始问题,您也可以转义您的 '0' 字符,如:

std::string ("\060\000\060", 3);

(因为 ASCII '0' 是八进制的 60)

MSDN 文档对此有一篇非常详细的文章,以及cppreference

于 2012-04-19T01:26:01.810 回答
4

如果 \0 后面跟着其他数字,则 \0 将被解释为八进制转义序列,因此 \00 将被解释为单个字符。(\0 在技术上也是八进制转义序列,至少在 C 中是这样)。

你这样做的方式:

std::string ("0\0" "0", 3)  // String concatenation 

之所以有效,是因为此版本的构造函数采用 char 数组;如果您尝试将“0\0”“0”作为 const char* 传递,它会将其视为 C 字符串,并且只会复制所有内容,直到出现空字符。

这是一个转义序列列表

于 2012-04-19T01:29:05.170 回答
1

我留下了这样的评论作为评论,但我觉得它可能需要更多的可见性,因为没有一个答案提到这种方法:

我现在更喜欢std::string用非打印字符(特别是嵌入的空字符)初始化 a 的方法是使用初始化列表的 C++11 特性。

std::string const str({'\0', '6', '\a', 'H', '\t'});

我不需要对我正在使用的字符数进行容易出错的手动计数,这样如果以后我想在中间的某个地方插入一个 '\013',我可以并且我的所有代码仍然可以工作. 它还完全避免了意外使用错误转义序列的任何问题。

唯一的缺点是所有这些额外的'字符,

于 2012-11-30T16:47:07.093 回答
0

借助用户定义文字的魔力,我们有了另一种解决方案。C++14 添加了std::string文字运算符。

using namespace std::string_literals;
auto const x = "\0" "0"s;

构造一个长度为 2 的字符串,其中包含一个 '\0' 字符(null),后跟一个 '0' 字符(数字零)。我不确定它是否比initializer_list<char> 构造方法更清晰,但它至少摆脱了'and,字符。

于 2016-07-30T01:44:35.867 回答
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

于 2020-09-04T07:25:14.167 回答