2015-04-07 1 views
1

Son est mon code simplifié:passage char * args [] par voidpointer

void main(){ 
    void* ptr; 
    char* args[3]; 
    args[0]="Arg1"; 
    args[1]="Arg2"; 
    args[2]="Arg3"; 
    ptr = &args; 

    myMethod(ptr); 
} 
static void myMethod(void* args){ 

} 

Comment convertir void* args à un char*[]? dans myMethod(void*)?

+4

Il suffit d'ajouter une distribution? – Crozin

Répondre

6

Vous voulez un pointeur vers pointeur vers char:

#include <stdio.h> 

static void myMethod(void *args) 
{ 
    char **ptr = args; 

    printf("%s\n", ptr[1]); 
} 

int main(void) 
{ 
    void *ptr; 
    char *args[3]; 

    args[0]="Arg1"; 
    args[1]="Arg2"; 
    args[2]="Arg3"; 
    ptr = args; /* You don't need the & */ 

    myMethod(ptr); 
    return 0; 
} 

Comme l'a souligné @Eregrith, passer le nombre de cellules à la fonction afin d'éviter une sortie de l'accès aux bornes:

#include <stdio.h> 

static void myMethod(void *args, size_t elems) 
{ 
    char **ptr = args; 

    for (size_t i = 0; i < elems; i++) 
     printf("%s\n", ptr[i]); 
} 

int main(void) 
{ 
    void *ptr; 
    char *args[3]; 

    args[0]="Arg1"; 
    args[1]="Arg2"; 
    args[2]="Arg3"; 
    ptr = args; 

    myMethod(ptr, sizeof(args)/sizeof(args[0])); 
    return 0; 
} 
+4

Je vous conseillerais également de passer le nombre actuel de cellules dans votre tableau afin d'éviter les désaccords potentiels – Eregrith

+0

Merci! Je ne savais pas comment lancer "char * []". – user2071938

+1

@Eregrith, point divin, édité. –