Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 文本从文本框到字符*(转换/封送)_C++_Visual Studio 2012_Marshalling_Managed C++ - Fatal编程技术网

C++ 文本从文本框到字符*(转换/封送)

C++ 文本从文本框到字符*(转换/封送),c++,visual-studio-2012,marshalling,managed-c++,C++,Visual Studio 2012,Marshalling,Managed C++,目前我正忙于从文本框中获取一些文本,然后将其转换为常量字符*。我有以下代码: System::String^ host = textBoxHostadres->Text; const char* host2 = (const char*)(void*)Marshal::StringToHGlobalAnsi(host); //system(host2); //What to do with this? Marshal::FreeHGlobal(host2); 它在

目前我正忙于从文本框中获取一些文本,然后将其转换为常量字符*。我有以下代码:

System::String^ host = textBoxHostadres->Text;
    const char* host2 = (const char*)(void*)Marshal::StringToHGlobalAnsi(host);
    //system(host2); //What to do with this?
    Marshal::FreeHGlobal(host2);
它在
marshall::FreeHGlobal
下给出一条红线(Visual Studio 2012)。谁能给我一个正确的方向,从
文本框
获取文本,并将其放入
常量字符*
?第一行运行良好,通过调试,我看到文本被捕获

更新:

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);
System::String^host=textBoxHostadres->Text;
pin_ptr wch=PtrToStringChars(主机);
//转换成字符*
尺寸=wcslen(wch)+1;
const size\u t newsize=100;
大小\u t convertedChars=0;
字符串[新闻大小];
wcstombs(转换字符、nstring、origsize、wch和截断);
strcat_s(nstring,“(char*)”;
常量字符*主机2=(常量字符*)(无效*)封送:StringToHGlobalAnsi(主机);
系统(主机2);
跟踪路由主机地址(主机2);
您将发现char*、wchar\u t*、\u bstr\u t、CComBSTR、CString、basic\u string和System.string之间所有可能的转换。

所涵盖的字符串类型包括char*、wchar\u t*、\u bstr\u t、CComBSTR、CString、basic\u string和System.string。在所有情况下,转换为新类型时都会生成字符串的副本。对新字符串所做的任何更改都不会影响原始字符串,反之亦然

关于您添加的编辑:


如果你至少能理解你正在复制的代码,那就太好了。这一行
strcat_s(nstring,”(char*)”
向字符串中添加一些字符,主要是
(char*)
,这一点很明显,因为
nstring
中不包含文件allready的地址,而是address+一些垃圾。另外,您不需要这一行
std::cout您在调用
Marshal::FreeHGlobal()时没有键入casting
host2


我已经更新了我的帖子,与上面的答案相关。怎么可能,nstring是空的?我需要填写地址来启动一个跟踪程序。最后一行确实是不必要的,但可以方便地查看打印出来的内容(调试)。我已经更新了我的C++代码。这应该可以做到。只有我仍然得到一个错误,这似乎与Boost::Asio有关。@computergek92所以你正在将你的
主机
转换为
nstring
,并且你再也不用
nstring
。。。删除
strcat_s(nstring,“(char*)”并写入
跟踪路由主机地址(nstring)对于字符串“^”到int?在列出的MSDN网站上没有相关信息。在互联网上,只有大量的静态数据casting@computergek92你用
string^
做一个
string
,然后使用
std::stoi
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);
System::String^ host = textBoxHostadres->Text;
const char* host2 = (const char*)(void*)Marshal::StringToHGlobalAnsi(host);
system(host2);
traceroute hostAddress(host2);
Marshal::FreeHGlobal((IntPtr) host2);