c++ - In RHEL linux, using std::string variable assigned with ""(empty string value) is giving junk values -


RHEL लिनक्स में, "" (रिक्त स्ट्रिंग मान) के साथ निर्दिष्ट std :: string चर का उपयोग करके जंक मान दे रहा है

उदाहरण के लिए नीचे दिए गए कोड में

  std :: string str = ""; printf ( "% s", str.c_str ());  

मेरे पास एक और कोड नमूना है

  int main () {string str = ""; Printf ("Str =% s \ n", str.c_str ()); स्ट्रिंग स्ट्रेटम्प; Char * pcTRMP = नया चार् [10]; // स्प्रिंटफ़ (पीसीटीएमपीपी, "% d", 7); Sprintf ((चार *) strTemp.c_str (), "% d", 7); Printf ("Str =% s \ n", str.c_str ()); Sprintf ((चार *) strTemp.c_str (), "% d", 8); Printf ("Str =% s \ n", str.c_str ()); वापसी 0; }  

परिणाम str = 7 str = 8

जहां str चर के लिए कोई असाइनमेंट नहीं है।

हमने इतने सारे स्थानों में जांच की इन्टरनेट में। मैं उम्मीद कर रहा हूं कि कोई इस समस्या को सुलझाने में मेरी मदद कर सकता है।

यह कोड RHEL Linux के पुराने संस्करणों में काम कर रहा है।

std :: string :: c_str () द्वारा लौटा संकेतक में लिखना बेकार है। यह स्पष्ट रूप से इंगित करता है कि यह अपरिभाषित व्यवहार में परिणाम है। यह सूचक मूलतः प्रकार const char * की है, खासकर इस सीमा को व्यक्त करने के लिए।

आपके प्रोग्राम द्वारा प्रदर्शित परिणामों के संबंध में, मुझे लगता है कि दोनों तार समान खाली स्ट्रिंग बफर पर इंगित करते हैं ( कुछ आंतरिक const char रिक्त [] = "" ), ताकि एक रिक्त स्ट्रिंग के मान को बदलने में एक को लिखना होगा।

यदि आपको वास्तव में std :: stringstream की बजाय sprintf , आप स्ट्रिंग्स के बजाय चार वैक्टर का उपयोग कर सकते हैं:

  std :: vector & lt; char & gt; buf (10); Sprintf (buf.data (), "% d", 7); Std :: string परिणाम = buf.data ();  

Comments

Popular posts from this blog

apache - 504 Gateway Time-out The server didn't respond in time. How to fix it? -

c# - .net WebSocket: CloseOutputAsync vs CloseAsync -

c++ - How to properly scale qgroupbox title with stylesheet for high resolution display? -