На самом деле, я нашел самый простой способ получить char *
от String^
- использовать хороший ol 'sprintf()
. Так что в вашем случае, вы можете просто сделать это:
char cNow[17] = { 0 };
String^ nowString = DateTime::Now.ToString("yyyy-MM-dd-HH:mm");
if (nowString->Length < sizeof(cNow)) // make sure it fits & allow space for null terminator
sprintf(cNow, "%s", nowString);
Нет необходимости называть Marshal
функции!
Update
Получается, что VS 2015 более тесно прилипает к C++ 11 стандартов, поэтому использование sprintf()
с .NET String, не будет работать. Самый простой способ заключается в использовании marshal_as()
функции, как это:
Включить эти строки перед кодом:
#include <msclr/marshal_cppstd.h>
using namespace msclr::interop;
Тогда это должно работать:
char cNow[17] = { 0 };
String^ nowString = DateTime::Now.ToString("yyyy-MM-dd-HH:mm");
string sNow = marshal_as<string>(nowString);
if (sNow.length() < sizeof(cNow)) // make sure it fits & allow space for null terminator
sprintf(cNow, "%s", sNow.c_str());
В противном случае, если вы не хотите для использования функции marshal_as()
, вы можете скопировать символ строки следующим образом:
char cNow[17] = { 0 };
String^ nowString = DateTime::Now.ToString("yyyy-MM-dd-HH:mm");
if (nowString->Length < sizeof(cNow)) // make sure it fits & allow space for null terminator
{
for (int i = 0; i < nowString->Length; i++)
cNow[i] = static_cast<char>(nowString[i]);
}
ПОЧЕМУ ВСЕ-КАПС? ВЫ СМОТРИТЕ? –
Предположительно, его колпачок заблокирован. Это также объясняет, почему он написал «.net» без крышек. – jalf
ошибочно хит колпачок блокировка – kman99