2011-11-12 18 views
31

मैं सी में एक प्रोजेक्ट पर काम कर रहा हूं जिसके लिए मुझे तारों के साथ गड़बड़ करने की आवश्यकता है। आम तौर पर, मैं सी ++ में प्रोग्राम करता हूं, इसलिए यह स्ट्रिंग.empty() कहने से थोड़ा अलग है।सी-स्ट्रिंग को खाली करने का उचित तरीका

मुझे आश्चर्य है कि सी में स्ट्रिंग को खाली करने का सही तरीका क्या होगा? क्या यह होगा?

 
buffer[80] = "Hello World!\n"; 

// ... 

strcpy(buffer, ""); 
+0

आपका उदाहरण उलझन में है। जाहिर है बफर को कहीं और घोषित किया गया है और आप इसे शाब्दिक से शुरू करने का प्रयास करते हैं। यहां कुछ भी साफ़ करने की आवश्यकता नहीं है। – pmr

+1

string.empty() स्ट्रिंग को संशोधित नहीं करता –

उत्तर

55

करना यह आप "खाली" से क्या मतलब है पर निर्भर करता है। यदि आप सिर्फ शून्य-लंबाई वाली स्ट्रिंग चाहते हैं, तो आपका उदाहरण काम करेगा।

यह भी काम करेगा:

buffer[0] = '\0'; 

आप स्ट्रिंग की सारी सामग्री को शून्य करने के लिए चाहते हैं, तो आप इसे इस तरह कर सकते हैं:

memset(buffer,0,strlen(buffer)); 

लेकिन यह केवल ऊपर के शून्यीकरण के लिए काम करेंगे पहले नल चरित्र के लिए।

स्ट्रिंग एक स्थिर सरणी है, तो आप उपयोग कर सकते हैं:

memset(buffer,0,sizeof(buffer)); 
+2

स्पष्टीकरण के लिए, अंतिम विधि काम करेगी यदि 'बफर' एक सरणी है, लेकिन यदि यह सूचक नहीं है। कंपाइलर सरणी के आकार को देखने में सक्षम होना चाहिए।यदि 'बफर' एक पॉइंटर है तो यह केवल पॉइंटर के आकार को शून्य करेगा, शायद 4 या 8 बाइट्स। –

1

खाली होने से आपका क्या मतलब है इस पर निर्भर करता है। तुम सिर्फ एक खाली स्ट्रिंग चाहते हैं, आप

buffer[0] = 0; 

कर सकता है आप शून्य करने के लिए हर तत्व सेट करना चाहते हैं,

memset(buffer, 0, 80); 
2

दो अन्य तरीकों strcpy(str, ""); और string[0] = 0 हैं

वास्तव में चर सामग्री (हटाने के लिए मामले में आप गंदे कोड है जो नहीं है उपरोक्त स्निपेट के साथ ठीक से काम करना: पी) नीचे दिए गए उदाहरण में लूप का उपयोग करें।

#include <string.h> 

... 

int i=0; 
for(i=0;i<strlen(string);i++) 
{ 
    string[i] = 0; 
} 

मामले में आप शुरू से ही वर्ण की एक गतिशील आवंटित सरणी साफ़ करना चाहते हैं, तो आप या तो malloc() और memset() या के संयोजन का उपयोग कर सकते हैं - और इस तरह से तेजी से होता है - calloc() जो मॉलोक के समान ही काम करता है लेकिन पूरे सरणी को नल के साथ प्रारंभ करता है।

आखिरकार मैं चाहता हूं कि आप अपना रनटाइम दिमाग में रखें। सभी तरह से, यदि आप विशाल सरणी (6 अंक और ऊपर) को संभालने वाले हैं, तो आपको पूरे स्ट्रिंग के माध्यम से memset() चलाने के बजाए पहले मान को नल पर सेट करने का प्रयास करना चाहिए।

यह पहली बार गंदे लग सकता है, लेकिन यह तेज़ तरीका है। पहले शून्य पर सभी पात्रों अन्य तरीकों बंद हो सकता है शून्य होगा) स्ट्रिंग के

0

जरूरतों नाम और इसकी लंबाई, तुम बस अपने कोड के बारे में अधिक ध्यान देने की जरूरत है;)

मुझे आशा है कि यह किसी के लिए भी उपयोगी था वे

void strClear(char p[],u8 len){u8 i=0; 
     if(len){while(i<len){p[i]=0;i++;}} 
    } 
संबंधित मुद्दे