如何将 System::String 转换为 const char*?
how to convert System::String to const char*?
如何将'String^'转换成'const char*'?
String^ cr = ("netsh wlan set hostednetwork mode=allow ssid=" + this->txtSSID->Text + " key=" + this->txtPASS->Text);
system(cr);
错误:
1 IntelliSense: argument of type "System::String ^" is incompatible with parameter of type "const char *"
您可以使用 msclr::interop::marshal_context
class:
#include <msclr/marshal.h>
然后:
String^ something = "something";
msclr::interop::marshal_context ctx;
const char* converted = ctx.marshal_as<const char*>(something);
system(converted);
当 ctx
超出范围时,converted
的缓冲区将被释放。
但在你的情况下,只调用等效的托管 API:
会容易得多
System::Diagnostics::Process::Start("netsh", "the args");
https://support.microsoft.com/en-us/help/311259/how-to-convert-from-system-string-to-char-in-visual-c 上的 4 种方法
在 VS2015 中对我不起作用。我遵循了这个建议:
https://msdn.microsoft.com/en-us/library/d1ae6tz5.aspx
为了方便起见,只需将其放入函数中即可。
我偏离了分配新内存的建议解决方案
对于 char* - 我宁愿把它留给调用者,即使这样
带来额外的风险。
#include <vcclr.h>
using namespace System;
void Str2CharPtr(String ^str, char* chrPtr)
{
// Pin memory so GC can't move it while native function is called
pin_ptr<const wchar_t> wchPtr = PtrToStringChars(str);
// Convert wchar_t* to char*
size_t convertedChars = 0;
size_t sizeInBytes = ((str->Length + 1) * 2);
wcstombs_s(&convertedChars, chrPtr, sizeInBytes, wchPtr, sizeInBytes);
}
如何将'String^'转换成'const char*'?
String^ cr = ("netsh wlan set hostednetwork mode=allow ssid=" + this->txtSSID->Text + " key=" + this->txtPASS->Text);
system(cr);
错误:
1 IntelliSense: argument of type "System::String ^" is incompatible with parameter of type "const char *"
您可以使用 msclr::interop::marshal_context
class:
#include <msclr/marshal.h>
然后:
String^ something = "something";
msclr::interop::marshal_context ctx;
const char* converted = ctx.marshal_as<const char*>(something);
system(converted);
当 ctx
超出范围时,converted
的缓冲区将被释放。
但在你的情况下,只调用等效的托管 API:
会容易得多System::Diagnostics::Process::Start("netsh", "the args");
https://support.microsoft.com/en-us/help/311259/how-to-convert-from-system-string-to-char-in-visual-c 上的 4 种方法 在 VS2015 中对我不起作用。我遵循了这个建议: https://msdn.microsoft.com/en-us/library/d1ae6tz5.aspx 为了方便起见,只需将其放入函数中即可。 我偏离了分配新内存的建议解决方案 对于 char* - 我宁愿把它留给调用者,即使这样 带来额外的风险。
#include <vcclr.h>
using namespace System;
void Str2CharPtr(String ^str, char* chrPtr)
{
// Pin memory so GC can't move it while native function is called
pin_ptr<const wchar_t> wchPtr = PtrToStringChars(str);
// Convert wchar_t* to char*
size_t convertedChars = 0;
size_t sizeInBytes = ((str->Length + 1) * 2);
wcstombs_s(&convertedChars, chrPtr, sizeInBytes, wchPtr, sizeInBytes);
}