通过voidpointer传递char*args[]

通过voidpointer传递char*args[],c,pointers,void-pointers,C,Pointers,Void Pointers,她是我的简化代码: 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*args转换为char*[]?在myMethodvoid*?中,需要指向char的指针:

她是我的简化代码:

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*args转换为char*[]?在myMethodvoid*?

中,需要指向char的指针:

正如@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;
}

您需要指向char的指针:

正如@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;
}

我还建议将数组中的实际单元数传递给您,以避免潜在的键断,谢谢!我不知道如何强制转换char*[]。@user2071938,不客气,还请注意,您可以直接将参数传递给函数。在主函数中不需要使用ptr。我建议您也传递数组中的实际单元格数,以避免潜在的不必要。谢谢!我不知道如何强制转换char*[]。@user2071938,不客气,还请注意,您可以直接将参数传递给函数,不需要在主函数中使用ptr