ऐसा लगता है जैसे आप पॉइंटर्स और सरणी के बीच उलझन में हैं। संकेत और सरणियों (इस मामले char *
और char []
में) कर रहे हैं not the same thing.
स्मृति में, यह इस तरह से (उदाहरण के the FAQ से लिया गया) लग रहा है (जैसे, a[10]
अतीत जहाँ भी a
अंक 10 प्रविष्टियों है)
पॉइंटर्स और सरणी के बीच के अंतर के बारे में भ्रमित होना आसान है, क्योंकि कई मामलों में, एक सरणी संदर्भ के पहले तत्व के लिए "decays" संदर्भ देता है। इसका मतलब है कि कई मामलों में (जैसे कि जब फंक्शन कॉल में पास किया जाता है) सरणी पॉइंटर्स बन जाती है। यदि आप और जानना चाहते हैं, this section of the C FAQ describes the differences in detail।
एक प्रमुख व्यावहारिक अंतर यह है कि संकलक जानता है कि एक सरणी कितनी देर तक है। उपरोक्त उदाहरण का उपयोग करना:
char a[] = "hello";
char *p = "world";
sizeof(a); // 6 - one byte for each character in the string,
// one for the '\0' terminator
sizeof(p); // whatever the size of the pointer is
// probably 4 or 8 on most machines (depending on whether it's a
// 32 or 64 bit machine)
अपने कोड को देखने के बिना, यह सर्वोत्तम कदम की सिफारिश करने के लिए मुश्किल है, लेकिन मैं हर जगह संकेत का उपयोग करने के लिए समस्या यदि आप वर्तमान में हो रही हैं, समाधान होगा बदलते संदेह है।ध्यान दें कि अब:
जहां भी सरणी होती थी, आपको स्मृति को प्रारंभ करने की आवश्यकता होगी। उदाहरण के लिए, char a[10];
char *a = malloc(10 * sizeof(char));
बन जाएगा, इसके बाद a != NULL
पर एक चेक होगा। ध्यान दें कि आपको इस मामले में sizeof(char)
कहने की ज़रूरत नहीं है, क्योंकि sizeof(char)
को 1 के रूप में परिभाषित किया गया है। मैंने इसे पूर्णता के लिए छोड़ दिया है।
कहीं भी आपने पहले सरणी लंबाई के लिए sizeof(a)
था (आप तार का उपयोग कर रहे हैं, तो आप strlen()
इस्तेमाल कर सकते हैं, जो '\0'
अप करने के लिए मायने रखता है) स्मृति आप आवंटित की लंबाई से प्रतिस्थापित करने की आवश्यकता होगी।
आपको प्रत्येक कॉल के लिए पर free()
पर एक संबंधित कॉल करने की आवश्यकता होगी। यह उस कंप्यूटर को बताता है जिसे आपने malloc()
के साथ मांगी गई स्मृति का उपयोग करके किया है। यदि आपका सूचक a
है, तो कोड में एक बिंदु पर बस free(a);
लिखें जहां आप जानते हैं कि अब आपको a
अंक की आवश्यकता नहीं है।
एक और जवाब के रूप में बताया, तो आप एक सरणी की शुरुआत का पता प्राप्त करना चाहते हैं, आप का उपयोग कर सकते हैं:
char* p = &a[0]
आप के रूप में "चार सूचक p
पता बन जाता है यह पढ़ सकते हैं तत्व [0]
a
"।
स्रोत
2012-03-09 02:53:01
[comp.lang.c FAQ] (http://c-faq.com/) के अनुभाग 6 पढ़ें। –