我目前使用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;
}
答案 0 :(得分:1)
为什么不复制原始字符串,一次复制一个字符,当你看到反斜杠时,你只需在副本上附加一个反斜杠?
但正如其他人所指出的,如果字符串不是例如在源代码中硬编码,那么你很可能不需要这样做。
答案 1 :(得分:0)
如果您在运行时使用C变量显示的字符串,则不存在反斜杠更改的风险。
C字符串中的反斜杠仅在解析源代码时对C编译器特殊,它将替换为例如"\n"
包含一个包含单个换行符的字符串。此替换仅发生在实际的字符串文字中,在运行时从不在内存中。
答案 2 :(得分:0)
你误解了反斜杠在C ++中是如何工作的。你的字符串只有一个反斜杠。在字符串文字中,您必须在代码中使用两个反斜杠,以便在运行时在字符串中获得一个反斜杠。
OS_CopyFile(szValueBuf, "C:\\TEMP\\product.ini",0);
上面的字符串中只有两个反斜杠。你为自己发明了一个不存在的问题。