2012-08-28 25 views
9

में एक मूल्य क्या बीच का अंतर है नियत:चार सरणी सी

char fast_car[15]="Bugatti"; 

और

char fast_car[15]; 
fast_car="Bugatti"; 

क्योंकि दूसरा एक परिणाम संकलन त्रुटि के साथ:

error: incompatible types when assigning to type ‘char[15]’ from type ‘char *’

जबकि पहले एक ठीक काम करता है। सरणी प्रारंभिकरण की तुलना में विभिन्न जगहों में सरणी में एक स्ट्रिंग डालना सहायक होगा।

+1

आप एक नए मान –

+3

के साथ सरणी भरने के लिए 'snprintf' या' strncpy' जैसे स्ट्रिंग फ़ंक्शन का उपयोग कर सकते हैं, जब तक कि आप वास्तव में वास्तव में वास्तव में सुनिश्चित नहीं हैं कि आप वास्तव में वास्तव में सुनिश्चित हैं कि आप क्या चाहते हैं। सुनिश्चित करें कि बफर काफी बड़ा है और इसके बजाय 'strcpy' का उपयोग करें। – harald

+0

@harald strncpy का उपयोग क्यों बुरा विचार है? यह आमतौर पर ओवरफ्लो को रोकता है। – hardpenguin

उत्तर

10

पहला प्रारंभिक है जबकि दूसरा असाइनमेंट है। चूंकि सरणी सी में संशोधित मान नहीं हैं, इसलिए आप उन्हें नए मान निर्दिष्ट नहीं कर सकते हैं।

आपको लगता है, आप सरणी सामग्री संशोधित कर सकते हैं, आप बस fast_car = ... नहीं कह सकते हैं। इसलिए सामग्री संशोधित हैं, सरणी स्वयं नहीं हैं।


इन व्यापक रूप से विभिन्न अवधारणाओं के लिए एक ही प्रतीक = का उपयोग करते हुए यह बहस का मुद्दा महत्व का है।

+2

'str_replace (" संशोधित "," mutable ");';) –

+2

@ निक: स्ट्रिंग प्रतिस्थापन वास्तव में सी में इतना आसान नहीं है;) –

+0

@cnicutar, क्या आप एक और समाधान सुझा सकते हैं? यह संरचना से मैन्युअल रूप से कुछ सरणी चर निर्दिष्ट करने के बारे में है। चार कार्यों के लिए सूचक का उपयोग करना, लेकिन क्या यह स्मृति प्रबंधन के लिए एक बुरा समाधान नहीं है? – hardpenguin

3
char fast_car[15]="Bugatti"; 

यह कहता है कि fast_car एक सरणी है और "बुर्ट्टी" स्ट्रिंग के साथ आरंभ किया जाना चाहिए। सही उपयोग:

char fast_car[15]; 
fast_car="Bugatti"; 

पहली पंक्ति चार सरणी (प्रारंभ नहीं हुई) की घोषणा है। दूसरा, fast_car यहां चार के इस सरणी में पहले तत्व का एक पता (एक सूचक) है। चार "बुर्ट्टी" की सरणी के लिए पॉइंटर fast_car का असाइनमेंट अंतर प्रकार के मूल्य से गलत है।

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