删除字符后面的反斜杠 这可能是一个新手问题,但我不是很擅长C++,还只是一个初学者。我的问题是如何从字符中去除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); }

删除字符后面的反斜杠 这可能是一个新手问题,但我不是很擅长C++,还只是一个初学者。我的问题是如何从字符中去除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); },c++,C++,szInstallPath可能没有、一个或两个反斜杠,如果有,我需要删除反斜杠。谁能给我指出正确的方向,好的网站教程或任何东西 谢谢这是一个使用STD::String 的C++解决方案 ... std::string stdInstallPath = szInstallPath; while(stdInstallPath.rbegin() != stdInstallPath.rend() && *stdInstallPath.rbegin() == '\\') std

szInstallPath
可能没有、一个或两个反斜杠,如果有,我需要删除反斜杠。谁能给我指出正确的方向,好的网站教程或任何东西


谢谢

这是一个使用STD::String

的C++解决方案
...

std::string stdInstallPath = szInstallPath;

while(stdInstallPath.rbegin() != stdInstallPath.rend() && *stdInstallPath.rbegin() == '\\')
    stdInstallPath.pop_back();

hr = MsiSetProperty(hInstall, "INSTALLLOCATION",  stdInstallPath.c_str());

...

这会查看字符串中的最后一个字符,如果它是反斜杠,则会将其删除,并一直持续到最后一个字符不是反斜杠为止。

类似的内容可能就足够了:

const size_t len = strlen(szInstallPath);
if( szInstallPath[len-1] == '\\' || szInstallPath[len-1] == '/' )
{
    // Terminate the string earlier
    szInstallPath[len-1] = 0;
}

@0A0D谢谢,从阅读中我看到这是使用字符串。我想使用字符,而且我只想删除结尾的反斜杠(中间会有一些),这就是为什么我发布了文章,因为我不确定如何实现这一点。字符
char
只有一个字节。您能澄清一下吗?@0A0D我已经添加了我的功能,也许这会有所帮助。我用C++编写一个DLL来与我的MSI交互。谢谢你总是可以把你的字符数组转换成一个字符串,然后再转换回来。@0a0d我可以做到这一点没有问题,但我仍然不知道如何检查结尾是否有反斜杠。我找到的所有东西都会删除所有事件。