2015-04-07 95 views
1

她是我的簡化代碼:傳遞的char * ARGS []通過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){ 

} 

我如何轉換void* argschar*[]?在myMethod(void*)

+4

只需添加演員? – Crozin

回答

6

你想要一個指針指向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; 
} 

正如@Eregrith指出,通過細胞數量的功能,以防止越界訪問:

#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

我會建議同時傳遞數組中的單元格數量,以避免潛在的綁定錯誤 – Eregrith

+0

謝謝!我不知道如何投「char * []」。 – user2071938

+1

@Eregrith,godd點,編輯。 –