2010-09-19 8 views
5

Ich habe eine Funktion, und ich möchte ein Array von char * übergeben, aber ich möchte nicht eine Variable nur dafür zu erstellen, wie dies:C: Übergeben eines Arrays in eine Funktion 'on the fly'

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

Um das zu bekommen, habe ich versucht, dieses:

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

Aber es funktioniert nicht. Ich probierte auch das:

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

Es kompiliert mit einer Warnung und wenn ich das Programm ausführe, friert es ein.
Ich habe versucht, ein bisschen mit Sternchen und Ampersands zu spielen, aber ich konnte es nicht richtig funktionieren.

Ist es überhaupt möglich? Wenn das so ist, wie?

Antwort

16

Ja, Sie können ein zusammengesetztes Literal verwenden. Beachten Sie, dass Sie der Funktion die Länge des Arrays mitteilen müssen. Einer ist am Ende ein NULL.

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

Diese Funktion wurde in C99 hinzugefügt.

+0

Und daher ist wahrscheinlich nicht verfügbar, wenn der Compiler MSVC ist. –

+0

+1 für die Erwähnung, dass dies eine C99-Funktion ist –

+0

Danke, das ist genau das, was ich brauchte. –

5

Sie müssen den Typ für Ihre Verbindung wörtliche erklären:

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

Einige Male variable Argumente sind ausreichend:

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

Aber ich bevorzugen im Allgemeinen die Methode, mit Matthew und Carl vorgeschlagen.