-1

ネイティブ C++ で位置メモリ ポインターが指す文字列の文字を取得したい:

C# での同等の実装では、次のようになります。

int positionMemory = getPosition();

long size = 10;

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

C++ で結果を生成するにはどうすればよいですか?

4

2 に答える 2

3

将来的に問題が発生しそうな予感…

以下は、結果の文字列 ( に格納されるresult) が引き続き「ANSI」になることを除いて、指定した C# スニペットとほぼ同等です。C# スニペットで発生するように、UNICODE に拡張されません。

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

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

文字は文字を含めsizeて配置されることに注意してください。そのため、文字列を C スタイルの文字列を期待するものに渡そうとすると、予期しない結果が生じる可能性があります。result'/0'c_str()

また、 an をポインターとして使用する場合の通常の警告int(特に、これを 64 ビット システムで動作させたい場合) が適用されます。

于 2012-05-15T23:35:47.470 に答える
1

「文字列」が でchar表されるメモリ内の位置にある s のシーケンスでありpositionMemory、null で終了すると仮定すると、次の方法で長さを取得できます。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 に答える