文本从文本框转换为char*(转换/封送)
Text from Textbox to char* (converting/marshal)
当前我正忙于从文本框中获取一些文本,然后将其转换为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
下提供了一条红线批注(Visual Studio 2012)。有人能给我一个正确的方向,让我把文本从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);
在这里,您可以找到char*、wchar_t*、_bstr_t、CComBSTR、CString、basic_string和System.string之间的所有可能转换。
所涵盖的字符串类型包括char*、wchar_t*、_bstr_t、CComBSTR、CString、basic_string和System.string。在所有情况下,转换为新类型时都会生成字符串的副本。对新字符串所做的任何更改都不会影响原始字符串,反之亦然。
关于您添加的EDIT:
如果你至少能试着理解你正在复制粘贴的代码,那就太好了。这一行strcat_s(nstring, " (char *)");
向字符串中添加了一些字符,主要是(char *)
,现在很明显,nstring
不包含文件allready的地址,而是包含地址+一些垃圾。此外,您根本不需要这条线路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);
您在对Marshal::FreeHGlobal()
:的调用中没有键入casting host2
System::String^ host = textBoxHostadres->Text;
const char* host2 = (const char*)(void*)Marshal::StringToHGlobalAnsi(host);
system(host2);
traceroute hostAddress(host2);
Marshal::FreeHGlobal((IntPtr) host2);
相关文章:
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何在C++中将十六进制字符串转换为文本数据
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- 如何将 qml 的文本转换为 float 和 int
- 将以 null 结尾的字节字符串转换为原始字符串文本
- 编译时间文本到数字转换 (atoi)
- 是否可以创建一个用户定义的文本,将字符串文本转换为 own 类型的数组?
- 如何使用C++将.trc文件类型转换为文本文件?
- 标准是否阻止在可变参数模板中使用足够小的文本值缩小文本转换范围
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 转换非常长的字符串文本C++以满足最大行长策略
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- QT 创建器只会将第一个单词从文本编辑转换为纯文本
- 将文本转换为左值
- 编写一个 C++ 程序以将文本文件转换为 HTML 文件
- 是否有必要在模板化函数中强制转换文本常量?
- FBX SDK - 将 fbx 文件的所有内容转换为文本
- 在c++中转换文本到csv文件
- Qt模型/视图委托:如何简单地转换文本数据