वास्तव में, मैं एक String^
से एक char *
प्राप्त करने के लिए सबसे आसान रास्ता मिल गया अच्छा 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
कार्यों कॉल करने के लिए कोई ज़रूरत नहीं!
अद्यतन
तो ऐसा लगता है कि वी.एस. 2015, सी ++ 11 मानकों के और अधिक बारीकी से पालन करता है तो नेट स्ट्रिंग के साथ sprintf()
का उपयोग कर काम नहीं करेगा। फिर इस काम करना चाहिए
#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()
समारोह इस तरह उपयोग करने के लिए है 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