En realidad, he encontrado la manera más fácil de conseguir un char *
de un String^
es utilizar el buen ol' sprintf()
. Así, en su caso, se puede hacer esta sencilla:
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);
No hay necesidad de llamar a las funciones Marshal
!
actualización
lo que parece que VS 2015 se adhiere más estrechamente a las normas C++ 11, por lo que usar sprintf()
con .NET cadena no va a funcionar. La forma más sencilla es utilizar la función marshal_as()
así:
Incluir estas líneas antes de su código:
#include <msclr/marshal_cppstd.h>
using namespace msclr::interop;
Entonces esto debería funcionar:
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());
De lo contrario, si no se desea para usar la función marshal_as()
, puede copiar la cadena carácter por carácter de esta manera:
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]);
}
¿POR QUÉ TODAS LAS CAPS? ¿ESTÁS GRITANDO? –
Es de suponer que su bloqueo de mayúsculas está atascado. Eso también explica por qué deletreó ".net" sin mayúsculas. – jalf
golpeó erróneamente las tapas de bloqueo – kman99