-1

我想获取本地 C++ 中位置内存指针指向的字符串的字符:

对于 C# 中的等效实现,它将是:

int positionMemory = getPosition();

long size = 10;

string result = Marshal.PtrToStringAnsi(new IntPtr(positionMemory), size);

如何在 C++ 中生成结果?

4

2 回答 2

3

我有一种感觉,这将导致问题在路上......

以下内容应该或多或少等同于您提供的 C# 片段,但结果字符串(存储在 中result)仍将是 'ANSI' - 它不会像 C# 片段中那样扩展为 UNICODE。

int positionMemory = getPosition();
long size = 10;

std::string result( reinterpret_cast<const char *>(positionMemory), size);

请注意,size字符将被放置在result- 包括'/0'字符中,因此如果您尝试将字符串传递给期望使用 C 样式的字符串,c_str()您可能会得到一些意想不到的结果。

此外,关于使用 anint作为指针的常见警告(特别是如果您希望它希望在 64 位系统上工作)适用。

于 2012-05-15T23:35:47.470 回答
1

假设“字符串”是一个chars 序列,它位于内存positionMemory中以空结尾表示的位置,您可以通过以下方式获得长度strlen

const char* str = static_cast<const char*>(positionMemory);
int length = strlen(str);

但是,从创建字符串的演示代码来看,这可能是您想要的,并且是更好的代码:

std::string result = static_cast<const char*>(positionMemory);
int length = result.length();
于 2012-05-15T23:24:06.797 回答