C字符串替换反斜杠

时间:2012-08-27 12:44:42

标签: c++ cstring

我目前使用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;
}

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

C字符串中的反斜杠仅在解析源代码时对C编译器特殊,它将替换为例如"\n"包含一个包含单个换行符的字符串。此替换仅发生在实际的字符串文字中,在运行时从不在内存中。

答案 2 :(得分:0)

你误解了反斜杠在C ++中是如何工作的。你的字符串只有一个反斜杠。在字符串文字中,您必须在代码中使用两个反斜杠,以便在运行时在字符串中获得一个反斜杠。

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

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