在 C++ 中定义 std::string 没有转义字符

Posted

技术标签:

【中文标题】在 C++ 中定义 std::string 没有转义字符【英文标题】:Define std::string in C++ without escape characters 【发布时间】:2012-05-08 15:23:01 【问题描述】:

将未转义的字符序列输入到std::string 最简单的方法是什么?

代替

 std::string st = "C:\\program files\\myFile.txt";

类似:(由于转义字符而无法正常工作)。

 std::string st = "C:\program files\myFile.txt";

【问题讨论】:

你建设得怎么样了?能否将内容存储在.txt 文件中并添加Makefile 规则以将其转换为.h 文件? @MikeSamuel,我正在使用 Visual Studio。 投反对票的人可以解释问题中的问题吗? 【参考方案1】:

你可以用 C++11 raw string literals:

std::string st = R"(C:\program files\myFile.txt)";

【讨论】:

太棒了。 LR 表示宽字符。语法起初让我感到困惑,因为字符串开头和结尾的分隔符是双字符序列......“(......然后......)” Ew 这种语法很恶心。将 () 放在引号中是谁的好主意?而替代版本 R"delimiter()delimiter" 更糟糕。【参考方案2】:

对于文件名,只需使用(前进?后退?)另一个方向的斜线。它也适用于 Windows:

std::string st = "C:/program files/myFile.txt";

【讨论】:

@chris:谢谢,但你的努力白费了。我会再次忘记,因为我的大脑认为记住它不够重要。 这并不总是适用于某些文件系统驱动程序,或者如果路径长于 MAX_PATH 并且使用了扩展路径前缀 @Asu:你为什么这么说? 对不起,我弄混了。我把 / 和 `\` 混在一起了。 很抱歉,这不是 OP 所要求的。

以上是关于在 C++ 中定义 std::string 没有转义字符的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中比较两个 std::string 时的未定义行为 [关闭]

string转TCHAR

与静态库中的 std::string 相关的 C++ 未定义符号

C语言中有string吗?

为啥 C++ 标准中没有 std::string_view 类型的参数的 std::basic_string 类的构造函数[重复]

是啥导致 c++ std::string 变量在传递给类时给出冲突的定义