替换wchar_t错误返回内存地址

时间:2017-12-09 15:27:15

标签: c++ winapi

我想替换特定字符wchar_t。结果它返回内存地址。有没有办法返回替换的wchar_t?

PFQuery *query = [PFQuery queryWithClassName:@"Likes"];
[query whereKey:@"user" isEqualTo:self.user];
[query includeKey:@"post"];
[query includeKey:@"post.owner"];

谢谢

2 个答案:

答案 0 :(得分:1)

我建议您使用std :: wstring,然后使用.replace,这并不是一个很好的“替换”#39;使用c-strings时的函数:

Point

答案 1 :(得分:0)

使用GetModuleFileNameEx Windows XP及更高版本。或者QueryFullProcessImageName用于Vista及更高版本。

否则,您无法假定"\\Device\\HardiskVolume1"始终为"C:"

另见SO Q& A:Convert HarddiskVolume path to normal path

首先将"\Device"更改为"\\?"

`"\\Device\\HardiskVolume1\\path.exe"` //to 
`"\\\\?\\HardiskVolume1\\path.exe"` 

wchar_t buf[MAX_PATH];
wchar_t *ptr = wcsstr(processPath, L"\\Device");
if(ptr)
{
    wcscpy_s(buf, L"\\\\?");
    wcscat_s(buf, ptr + wcslen(L"\\Device"));
}

现在您可以在buf中打开CreateFile,然后使用GetFinalPathNameByHandle获取

`"\\\\?\\C:\\path.exe"`

请注意,如果找不到搜索字符串,wcsstr将返回NULL。如果找到搜索字符串并且复制成功,则最终会以您完成此操作的方式覆盖processPath。此外,wcscpy_swcscpy的安全版本。如果您不想正确使用wcscpy_s,请使用wcscpy而不使用100之类的随机数作为参数。