2010-09-19 14 views
5

Tengo una función, y quiero pasar una matriz de char * a ella, pero no quiero crear una variable solo para hacer eso, como esto:C: pasar una matriz a una función 'sobre la marcha'

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

Para conseguir alrededor de eso, he intentado esto:

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

Pero no funciona. También probé esto:

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

Compila con una advertencia y si ejecuto el programa, se congela.
Intenté jugar un poco con asteriscos y símbolos pero no pude hacerlo funcionar correctamente.

¿Es posible? ¿Si es así, cómo?

Respuesta

16

Sí, puede usar un literal compuesto. Tenga en cuenta que deberá proporcionar alguna forma para que la función conozca la longitud de la matriz. Una es tener un NULL al final.

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

Esta característica se añadió en C99.

+0

Y, por lo tanto, probablemente no esté disponible si el compilador es MSVC. –

+0

+1 por mencionar que esta es una característica C99 –

+0

Gracias, eso es justo lo que necesitaba. –

5

tiene que declarar el tipo de compuesto para su literal:

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

Algunas veces argumentos variables son suficientes:

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

Pero en general yo prefiero el método sugerido por Mateo y Carl.

Cuestiones relacionadas