从char中删除尾部反斜杠

时间:2013-02-14 14:47:25

标签: c++

这可能是一个新手问题,但我不是很擅长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可能没有,一个或两个反斜杠,如果有的话,我需要删除反斜杠。任何人都可以指出我正确的方向,请参阅好的网站教程或其他什么?

由于

2 个答案:

答案 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;
}