0

現在、テキスト ボックスからテキストを取得し、const char* に変換するのに忙しいです。次のコードがあります。

System::String^ host = textBoxHostadres->Text;
    const char* host2 = (const char*)(void*)Marshal::StringToHGlobalAnsi(host);
    //system(host2); //What to do with this?
    Marshal::FreeHGlobal(host2);

の下に赤線 (Visual Studio 2012) が表示されMarshal::FreeHGlobalます。textboxからテキストを取得してに取得するための正しい方向を教えてもらえますconst char*か? 最初の行はうまく機能し、デバッグを通じてテキストがキャプチャされていることがわかります。

アップデート:

System::String^ host = textBoxHostadres->Text;
                pin_ptr<const wchar_t> wch = PtrToStringChars(host);

            // Convert to a char*
            size_t origsize = wcslen(wch) + 1;
            const size_t newsize = 100;
            size_t convertedChars = 0;
            char nstring[newsize];
            wcstombs_s(&convertedChars, nstring, origsize, wch, _TRUNCATE);
            strcat_s(nstring, " (char *)");

            const char* host2 = (const char*)(void*)Marshal::StringToHGlobalAnsi(host);
            system(host2);

            traceroute hostAddress(host2);
4

2 に答える 2

0

host2への呼び出しで型キャストしていませんでしたMarshal::FreeHGlobal():

System::String^ host = textBoxHostadres->Text;
const char* host2 = (const char*)(void*)Marshal::StringToHGlobalAnsi(host);
system(host2);
traceroute hostAddress(host2);
Marshal::FreeHGlobal((IntPtr) host2);
于 2013-06-25T14:11:22.720 に答える
0

ここでは、 char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string、および System.Stringの間で可能なすべての変換を見つけることができます。

対象となる文字列型には、char *、wchar_t*、_bstr_t、CComBSTR、CString、basic_string、および System.String が含まれます。いずれの場合も、新しい型に変換されるときに文字列のコピーが作成されます。新しい文字列に変更を加えても、元の文字列には影響しません。

追加した編集について:

少なくとも、コピペしているコードを理解しようとしていただければ幸いです。この行strcat_s(nstring, " (char *)");は、主に文字列にいくつかの文字を追加します。これは、ファイルのアドレスが既に含まれ(char *)ていないことから明らかですが、アドレス + いくつかのゴミです。nstringまた、この行はまったく必要ありませんstd::cout << nstring << std::endl;

これは、実装がどのように見えるかです。

System::String^ host = textBoxHostadres->Text;
pin_ptr<const wchar_t> wch = PtrToStringChars(host);
// Convert to a char*
size_t origsize = wcslen(wch) + 1;
const size_t newsize = 100;
size_t convertedChars = 0;
char nstring[newsize];  // nstring is an array of chars
wcstombs_s(&convertedChars, nstring, origsize, wch, _TRUNCATE);
// strcat_s(nstring, " (char *)");  this line adds trash to your nstring!!!
traceroute hostAddress(nstring);
于 2013-06-25T12:52:05.300 に答える