【问题标题】:Back slash causing problems c++反斜杠导致问题c ++
【发布时间】:2024-01-06 00:21:01
【问题描述】:

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

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

所以对于这个例子,我会得到这些错误/警告:“未知转义序列:'\E'”“未知转义序列:'\A'”。 由于我需要输入窗口的确切名称,有什么方法可以避免使用反斜杠或阻止编译器将它们解释为“转义序列”?

【问题讨论】:

  • 我认为您需要另一个反斜杠来转义反斜杠...换句话说,要获得反斜杠,请使用 '\\'
  • 您可以在 Windows 路径中使用正斜杠 (/)。
  • @JesperJuhl:除了代码试图对窗口的标题栏执行字符串匹配。
  • 看看原始字符串/字符文字:docs.microsoft.com/en-us/cpp/cpp/…

标签: c++ windows path escaping


【解决方案1】:

你必须正确地转义它们,C++11 添加了raw string 这可以简化这件事:

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

否则手动操作:

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

【讨论】:

    【解决方案2】:

    你应该正确地逃避它:

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

    有关所有转义序列的完整列表,请查看:

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

    【讨论】:

      【解决方案3】:

      您可以将反斜杠翻倍:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】: