这可能是一个新手问题,但我不是很擅长C ++而且还是初学者。我的问题是如何从char中删除bk的任何尾部反斜杠:
extern "C" UINT __stdcall DeleteTrailingBackslash(MSIHANDLE hInstall)
{
HRESULT hr = S_OK;
UINT er = ERROR_SUCCESS;
LPWSTR szValueBuf = NULL;
char szInstallPath[MAX_PATH];
hr = WcaInitialize(hInstall, "DeleteTrailingBackslash");
ExitOnFailure(hr, "Failed to initialize");
WcaLog(LOGMSG_STANDARD, "Initialized.");
hr = WcaGetProperty(L"INSTALLLOCATION",&szValueBuf);
ExitOnFailure(hr, "failed to get Install Location");
wcstombs(szInstallPath, szValueBuf, 260);
// I would like to strip back the trailing backslashes
// and re add the property to my MSI
hr = MsiSetProperty(hInstall, "INSTALLLOCATION", szInstallPath);
ExitOnFailure(hr, "failed to set the install location");
LExit:
er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE;
return WcaFinalize(er);
}
szInstallPath
可能没有,一个或两个反斜杠,如果有的话,我需要删除反斜杠。任何人都可以指出我正确的方向,请参阅好的网站教程或其他什么?
由于
答案 0 :(得分:5)
这是使用std :: string
的C ++解决方案...
std::string stdInstallPath = szInstallPath;
while(stdInstallPath.rbegin() != stdInstallPath.rend() && *stdInstallPath.rbegin() == '\\')
stdInstallPath.pop_back();
hr = MsiSetProperty(hInstall, "INSTALLLOCATION", stdInstallPath.c_str());
...
这会查看字符串中的最后一个字符,如果它是反斜杠则会删除它,并继续直到最后一个字符不是反斜杠。
答案 1 :(得分:2)
这样的事情就足够了:
const size_t len = strlen(szInstallPath);
if( szInstallPath[len-1] == '\\' || szInstallPath[len-1] == '/' )
{
// Terminate the string earlier
szInstallPath[len-1] = 0;
}