ネイティブ C++ で位置メモリ ポインターが指す文字列の文字を取得したい:
C# での同等の実装では、次のようになります。
int positionMemory = getPosition();
long size = 10;
string result = Marshal.PtrToStringAnsi(new IntPtr(positionMemory), size);
C++ で結果を生成するにはどうすればよいですか?
ネイティブ C++ で位置メモリ ポインターが指す文字列の文字を取得したい:
C# での同等の実装では、次のようになります。
int positionMemory = getPosition();
long size = 10;
string result = Marshal.PtrToStringAnsi(new IntPtr(positionMemory), size);
C++ で結果を生成するにはどうすればよいですか?
将来的に問題が発生しそうな予感…
以下は、結果の文字列 ( に格納される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 ビット システムで動作させたい場合) が適用されます。
「文字列」が で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();