反斜杠导致问题C ++

时间:2018-12-28 09:08:00

标签: c++ windows path escaping

我试图在C ++中以这样的字符串使用反斜杠:

HWND hwnd = FindWindowA(NULL, "C:\Example\App.exe");

因此对于此示例,我将得到以下错误/警告:“未知转义序列:'\ E'”“”未知转义序列:'\ A'“。 由于我需要输入窗口的确切名称,是否有任何方法可以避免使用反斜杠或阻止编译器将其解释为“转义序列”?

4 个答案:

答案 0 :(得分:7)

您必须正确地逃避它们,C ++ 11添加了raw string,可以简化此事情:

HWND hwnd = FindWindowA(NULL, R"(C:\Example\App.exe)");

其他则手动完成:

HWND hwnd = FindWindowA(NULL, "C:\\Example\\App.exe");

答案 1 :(得分:4)

您应该正确地避免这种情况:

HWND hwnd = FindWindowA(NULL, "C:\\Example\\App.exe");

有关所有转义序列的完整列表,请检查以下内容:

https://en.cppreference.com/w/cpp/language/escape

答案 2 :(得分:1)

您可以将反斜杠加倍,以使它们转义:

HWND hwnd = FindWindowA(NULL, "C:\\Example\\App.exe");

答案 3 :(得分:0)

在字符串文字中,反斜杠是字符转义序列的第一个字符。因此,"\n"由两个字符组成:换行符(来自\n)和空字符(因为它是字符串文字)。

因此,要在文本中添加反斜杠,您需要一个表示反斜杠的转义字符。很简单:"\\"由两个字符组成:反斜杠字符(来自\\)和空字符(因为它是字符串文字)。

另一种可能性是使用“原始字符串文字”,它会忽略转义序列。 R"(\n\\)"包含五个字符:反斜杠字符,n字符,另外两个反斜杠字符和空字符(因为它是字符串文字)。