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()时没有键入castinghost2
:
我已经更新了我的帖子,与上面的答案相关。怎么可能,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);