मैं निम्न सरणी घोषित करता हूं:मैं सी में "char *" सरणी की लंबाई कैसे प्राप्त करूं?
char* array [2] = { "One", "Two"};
मैं इस सरणी को फ़ंक्शन में पास करता हूं। मैं फ़ंक्शन में इस सरणी की लंबाई कैसे पा सकता हूं?
मैं निम्न सरणी घोषित करता हूं:मैं सी में "char *" सरणी की लंबाई कैसे प्राप्त करूं?
char* array [2] = { "One", "Two"};
मैं इस सरणी को फ़ंक्शन में पास करता हूं। मैं फ़ंक्शन में इस सरणी की लंबाई कैसे पा सकता हूं?
अतिरिक्त प्रयास किए बिना आप इसे किसी फ़ंक्शन में पास करने के बाद किसी सरणी की लंबाई नहीं पा सकते हैं।
vector
जैसे (सिफारिश) का उपयोग करें: करने के लिए आप की आवश्यकता होगी।मामले में आप सोच रहे थे, ज्यादातर लोगों तथ्य यह है कि सी तार इस तरह काम खेद है।
इस प्रकार उन्होंने बी तारों का आविष्कार किया। –
@MooingDuck लिंक कृपया :) Google विषय पर मां है –
स्पष्ट रूप से सही नाम है [BSTR] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069 (v = vs.85) .aspx) (लोग सी स्ट्रिंग से अधिक इनसे नफरत करते हैं) –
जब आप एक सरणी पास करते हैं तो फ़ंक्शन के भीतर आकार निर्धारित करने का एक आसान तरीका नहीं है।
आप या तो एक पैरामीटर या उपयोग std :: वेक्टर के रूप में सरणी आकार पारित कर सकते हैं < std :: स्ट्रिंग>
आप विशेष रूप से रोमांच महसूस कर रहे हैं, तो आप उपयोग कर सकते हैं some advanced template techniques
संक्षेप में यह कैसा
template <typename T, size_t N>
void YourFunction(T (&array)[N])
{
size_t myarraysize = N;
}
हां, जो वर्तमान में मैं कर रहा हूं लेकिन मैं उस अतिरिक्त पैरामीटर को हटाना चाहता था। ओह अच्छी तरह से – bubbles
एक std :: array
@ बबल्स 'इंट मुख्य (argc, char ** argv) '। यदि यह सरल मुख्य था तो अलग-अलग किया जाएगा। –
अगर कुछ दिखता है आप का मतलब है कि सभी तारों को कितने समय तक जोड़ा गया है।
int n=2;
int size=0;
char* array [n] = { "One", "Two"};
for (int i=0;i<n;++i)
size += strlen(array[i];
जोड़ा गया:
हाँ thats क्या im वर्तमान में कर रहे, लेकिन मैं उस अतिरिक्त परमाटर दूर करने के लिए चाहता था। ओह अच्छी तरह से -
शायद इस के लिए एक बुरी प्रतिक्रिया प्राप्त करने के लिए जा रहा है, लेकिन आप हमेशा आकार स्टोर करने के लिए, जब तक पहले सूचक इस्तेमाल कर सकते हैं के रूप में आप यह सम्मान या वास्तव में एक सूचक होने के लिए यह गलती नहीं है।
char* array [] = { (char*)2,"One", "Two"};
long size=(long)array[0];
for(int i=1; i<= size;++i)
printf("%s",array[i]);
या फिर आप अपने सरणी समाप्त नल सकता
चार * सरणी [] = { "एक", "दो", (चार *) 0};
for(int i=0;array[i]!=0;++i)
{
printf("%s",array[i]);
}
पॉइंटर से सरणी आकार प्राप्त करना संभव नहीं है। आप सरणी को एक नल-पॉइंटर के साथ समाप्त कर सकते हैं। इस तरह आपका फ़ंक्शन आकार जानने के लिए नल-पॉइंटर की खोज कर सकता है, या बस नल को हिट करने के बाद केवल प्रोसेसिंग इनपुट को रोक सकता है ...
सी आपकी पीठ के पीछे कुछ चालबाजी कर रहा है।
void foo(int array[]) {
/* ... */
}
void bar(int *array) {
/* ... */
}
इन दोनों समान हैं:
6.3.2.1.3: को छोड़कर जब यह sizeof ऑपरेटर के संकार्य या एकल & ऑपरेटर, है या एक स्ट्रिंग शाब्दिक प्रारंभ करने में प्रयोग किया जाता है एक सरणी, एक अभिव्यक्ति जिसमें '' सरणी प्रकार 'प्रकार है, को' 'पॉइंटर टाइप टाइप' ' ' के साथ एक अभिव्यक्ति में परिवर्तित किया गया है जो सरणी ऑब्जेक्ट के प्रारंभिक तत्व को इंगित करता है और यह एक अंतराल नहीं है। यदि सरणी ऑब्जेक्ट में स्टोरेज क्लास पंजीकृत है, तो व्यवहार अपरिभाषित है।
नतीजतन, यदि आप नहीं जानते, foo()
या bar()
, यदि आप एक सरणी के साथ कहा जाता है, एक सरणी के एक भाग, या एक ही पूर्णांक के लिए सूचक थे अंदर:
void foo(int *array)
सिर्फ खुद को याद दिलाना है कि वे वास्तव में एक
सरणी, बल्कि एक पारित नहीं किया गया:
int a[10];
int b[10];
int c;
foo(a);
foo(&b[1]);
foo(&c);
कुछ लोगों की तरह उनके कार्यों लिखना पसंद एक पूर्णांक के लिए सूचक और कहीं और कहीं और पूर्णांक हो सकता है या नहीं। कुछ लोग अपने कार्यों को लिखना पसंद करते हैं जैसे: , यह बेहतर ढंग से याद दिलाता है कि फ़ंक्शन को पारित करने की अपेक्षा करता है। भी लंबाई paramenter साथ
जो जिस तरह से आप यह करने के लिए, अगर आप को पता है कितनी देर तक अपने सरणी है चाहता हूँ की तरह की परवाह किए बिना, आपके पास कुछ विकल्प मिल गया है। (int main(int argc, char *argv
सोचें))।
NULL
हो, अंतिम तत्व को छोड़कर। (char *s="almost a string";
या execve(2)
सोचें।)printf("%s%i", "hello", 10);
सोचें - स्ट्रिंग अन्य तर्कों का वर्णन करती है। printf(3)
stdarg(3)
तर्क हैंडलिंग का उपयोग करता है, लेकिन यह आसानी से एक सरणी हो सकता है।)ट्रिविया: 'argv' दोनों बिंदु 1 और 2 करता है। – u0b34a0f6ae
बजाय `मैं` घ का उपयोग कर नए सी ++ 11 std :: सरणी
http://www.cplusplus.com/reference/stl/array/
मानक सरणी आकार विधि अपने
चार सितारा == चरित्र सूचक –
संयोग की तलाश में है का उपयोग करें, 'i'' शायद यह एक उचित सवाल है "हेरिस्टिक (मूल अंग्रेजी बोलने वालों के लिए प्रश्न को पढ़ने में आसान बनाने के अलावा) से बचने में मदद करेगा। – sarnold