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);

它在Marshal::FreeHGlobal. 有人可以给我一个正确的方向来获取文本textbox并将其传递给 aconst 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 回答