2010-09-19 9 views
5

मेरे पास एक फ़ंक्शन है, और मैं इसे char * की एक सरणी पास करना चाहता हूं, लेकिन मैं ऐसा करने के लिए केवल एक चर नहीं बनाना चाहता, जैसे इस:सी: फ्लाई पर 'फंक्शन' पर एक सरणी पास करना

foobar=foo({"aa","bb","cc"}); 

लेकिन यह काम नहीं करता:

char *bar[]={"aa","bb","cc"}; 
foobar=foo(bar); 

कि चारों ओर पाने के लिए, मैं इस कोशिश की। मैंने यह भी कोशिश की:

foobar=foo("aa\0bb\0cc"); 

यह एक चेतावनी के साथ संकलित करता है और यदि मैं प्रोग्राम निष्पादित करता हूं, तो यह जम जाता है।
मैंने तारों और एम्पर्सेंड के साथ थोड़ा सा खेलने की कोशिश की लेकिन मैं इसे ठीक से काम नहीं कर सका।

क्या यह भी संभव है? यदि हां, तो कैसे?

उत्तर

16

हां, आप एक यौगिक शाब्दिक का उपयोग कर सकते हैं। ध्यान दें कि फ़ंक्शन के लिए सरणी की लंबाई जानने के लिए आपको कुछ तरीका प्रदान करने की आवश्यकता होगी। एक अंत में एक पूर्ण होना है।

foo((char *[]){"aa","bb","cc",NULL}); 

यह सुविधा सी 99 में शामिल की गई थी।

+0

और यदि संकलक एमएसवीसी है तो संभवतः उपलब्ध नहीं है। –

+0

+1 यह उल्लेख करने के लिए कि यह एक सी 99 फीचर –

+0

धन्यवाद है, यही वही है जो मुझे चाहिए। –

5

आप अपने परिसर शाब्दिक के लिए प्रकार की घोषणा करने की जरूरत है:

foobar = foo((char *[]){"aa", "bb", "cc"}); 
1

कभी-कभी चर तर्क पर्याप्त हैं:

#include <stdarg.h> 
#include <stdio.h> 

void func(int n, ...) 
{ 
    va_list args; 
    va_start(args, n); 
    while (n--) 
    { 
    const char *e = va_arg(args, const char *); 
    printf("%s\n", e); 
    } 
    va_end(args); 
} 

int main() 
{ 
    func(3, "A", "B", "C"); 
    return 0; 
} 

लेकिन मैं आम तौर पर विधि मैथ्यू और कार्ल ने सुझाव दिया पसंद करते हैं।

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