2010-09-19 38 views
5

Bir işlevim var ve ona bir char * dizisini aktarmak istiyorum, ancak bunu yapmak için bir değişken oluşturmak istemiyorum. Bu:C: 'Fly the fly' işlevine bir diziyi geçirme

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

Ama çalışmıyor:

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

o kaçınmak için bu çalıştı. Ben de denedim bu:

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

bir uyarı ile derler ve ben programı çalıştırmak, eğer donar.
Çok fazla yıldız ve ampersan çalmayı denedim ancak düzgün çalışmasını sağlayamadım.

Bu mümkün mü? Öyleyse nasıl?

cevap

16

Evet, bir bileşik hazırlığı kullanabilirsiniz. Fonksiyonun dizinin uzunluğunu bilmesi için bir yol sağlamanız gerektiğini unutmayın. Birincisi sonunda bir NULL var.

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

Bu özellik C99'a eklenmiştir.

+0

Ve bu nedenle derleyici MSVC ise, muhtemelen kullanılamaz. –

+0

+1, bunun bir C99 özelliği olduğunu belirtmek için –

+0

Teşekkürler, bu sadece ihtiyacım olan şey. –

5

Sen Değişmez bileşik için türü bildirmek gerekir:

#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; 
} 

Ama genellikle Matthew ve Carl önerdiği yöntem tercih:

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

Bazen Değişken parametreler yeterlidir.

İlgili konular