2010-02-10 7 views
5

कैसे चार के लिए एक स्ट्रिंग आवंटित करने के लिए * पीडब्लूकैसे C++ में ग में चार के लिए एक स्ट्रिंग आवंटित करने के लिए * पीडब्लू ++

की तरह ...

चार * पीडब्लू = कुछ स्ट्रिंग

??

+1

चार पीडब्लू = "कुछ स्ट्रिंग" *; क्या आप इसकी उम्मीद नहीं कर रहे हैं? – Jagannath

+0

अगर मैं char * pw = "कुछ स्ट्रिंग" की तरह उपयोग करता हूं; मुझे अपवाद मिल रहा है। – Anuya

+0

"ढेर के भ्रष्टाचार" आप पूरे कोड पोस्ट कर सकते हैं? – Jagannath

उत्तर

6

निरंतर आरंभीकरण के लिए आप बस

char *pw = "mypassword"; 

उपयोग कर सकते हैं स्ट्रिंग एक चर में संग्रहीत किया जाता है, और आप() फ़ंक्शन स्ट्रिंग की एक प्रति तो आप strcpy उपयोग कर सकते हैं बनाने की जरूरत है

char *pw = new char(strlen(myvariable) + 1); 
strcpy(pw, myvariable); 
// use of pw 
delete [] pw; // do not forget to free allocated memory 
+2

आपको शाब्दिक पर 'कॉन्स्ट char * pw' का उपयोग करना चाहिए। – Notinlist

3

यदि आप सिर्फ pw पर एक स्ट्रिंग अक्षर निर्दिष्ट करना चाहते हैं, तो आप इसे char *pw = "Hello world"; जैसे कर सकते हैं।

आप एक सी ++ std::string वस्तु है, तो मूल्य जिनमें से आप pw को असाइन करना चाहते हैं, आप इसे char *pw = some_string.c_str() की तरह कर सकते हैं। हालांकि, pw अंक जो मान some_string के जीवनकाल के लिए मान्य होंगे।

+0

यह केवल जब तक आप 'some_string' पर एक परिवर्तनशील कार्रवाई करने मान्य की गारंटी दी है। – Bill

2

यदि आपका मतलब std::string है, तो आप c_str पर कॉल करके, सी-स्टाइल स्ट्रिंग के लिए पॉइंटर प्राप्त कर सकते हैं। लेकिन सूचक को const होना चाहिए।

const char *pw = astr.c_str(); 

एक बफर आपने पहले आवंटित किया है pw अंक, आप के बजाय कि बफर में एक स्ट्रिंग की सामग्री कॉपी करना चाहते हो सकता है, तो:

astr.copy(pw, lengthOfBuffer); 

आप एक स्ट्रिंग शाब्दिक के साथ शुरू कर रहे हैं यह पहले से ही एक सूचक है:

const char *pw = "Hello, world". 

सूचना const फिर - स्ट्रिंग शाब्दिक, संशोधित नहीं किया जाना चाहिए क्योंकि वे अपने कार्यक्रम में संकलित किया गया है।

लेकिन अगर आप एक बेहतर समय आम तौर पर होगा यदि आप std::string हर जगह का उपयोग करें:

#include <string> 
2

स्ट्रिंग में सीमित होने चाहिए:

std::string astr("Hello, world"); 

वैसे, आप सही हेडर को शामिल करने की जरूरत है डबल कोट्स जैसे:

char * pStr = "stackoverflow";

यह इस स्ट्रिंग को प्रोग्राम की पढ़ाई केवल स्मृति में संग्रहीत करेगा। और बाद में संशोधन पर यूबी का कारण बन सकता है।

+0

अगर मैं char * pw = "कुछ स्ट्रिंग" की तरह उपयोग करता हूं; मुझे अपवाद मिल रहा है। [इस टिप्पणी को हटाना] कार्तिक 4 सेकंड पहले संपादित – Anuya

+3

@Mac - - "ढेर के भ्रष्टाचार" अपने कोड सी अनुकूलता की वजह से काम करता है, लेकिन यह एक 'स्थिरांक चार *' ' – Manuel

2

मुझे लगता है कि आप यह कर सकते हैं:

using namespace std; 
string someString; 
geline(cin,someString); 
char *pw = strdup(someString.c_str()); 

लेकिन itanother तरह से कर रही है पर विचार करें। http://tiswww.case.edu/php/chet/readline/rltop.html (जीएनयू रीडलाइन लाइब्रेरी) देखें। मुझे इसके बारे में विवरण नहीं पता, बस इसके बारे में सुना है। अन्य मानक इनपुट से पासवर्ड पढ़ने के लिए अधिक विस्तृत या अन्य युक्तियां हो सकती हैं।

यदि आप केवल कुछ कॉल के लिए इसे एक कॉल के लिए उपयोग करना चाहते हैं तो आपको कुछ स्ट्रिंग की सामग्री की प्रतिलिपि बनाने की आवश्यकता नहीं है, तो आप someString.c_str() का उपयोग सीधे const char * के रूप में कर सकते हैं।

आप pw कुछ समय बाद में free उपयोग करने के लिए

+2

strdup' आसान है का उपयोग लेकिन पोर्टेबिलिटी मुद्दों के प्रति सतर्क रहने अच्छी आदत है : http://stackoverflow.com/questions/482375/c-strdup- कार्यक्षमता – Manuel

संबंधित मुद्दे