0

我目前使用 C 字符串标头和 C++ 并且遇到了问题。我有很长的路要走:

C:\bla\bla\bla\bla

我需要将反斜杠更改为双反斜杠,以便我的OS_CopyFile()函数可以正确读取它,但我不知道如何?

我使用以下方法获取路径:

CHAR* szValueBuf = NULL;
DWORD cchValueBuf = 0;
UINT uiStat =  MsiGetProperty(hInstall, TEXT("OriginalDatabase"), TEXT(""), &cchValueBuf);

if (ERROR_MORE_DATA == uiStat)
{
    ++cchValueBuf; 
    szValueBuf = new TCHAR[cchValueBuf];
    if (szValueBuf)
    {
        uiStat = MsiGetProperty(hInstall, TEXT("OriginalDatabase"), szValueBuf, &cchValueBuf);
    }
}
if (ERROR_SUCCESS != uiStat)
{
    if (szValueBuf != NULL) 
        delete[] szValueBuf;
    return ERROR_INSTALL_FAILURE;
}
4

3 回答 3

1

为什么不复制原始字符串,一次一个字符,当您看到反斜杠时,您只需在副本中附加一个额外的反斜杠?

但正如其他人所指出的,如果字符串没有在源代码中进行硬编码,那么您很可能不需要这样做。

于 2012-08-27T12:49:03.580 回答
0

如果您在运行时将字符串显示在 C 变量中,则不存在更改反斜杠的风险。

C 字符串中的反斜杠仅在 C 编译器解析源代码时是特殊的,它将替换例如"\n"包含单个换行符的字符串。这种替换只发生在实际的字符串文字中,永远不会在运行时发生在内存中。

于 2012-08-27T12:49:17.677 回答
0

您误解了反斜杠在 C++ 中的工作方式。您的字符串只有一个反斜杠。在字符串文字中,您必须在代码中使用两个反斜杠才能在运行时在字符串中使用一个反斜杠。

OS_CopyFile(szValueBuf, "C:\\TEMP\\product.ini",0);

上面的字符串中只有两个反斜杠。你为自己发明了一个不存在的问题。

于 2012-08-27T13:56:31.367 回答