通过voidpointer传递char*args []

use*_*938 1 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){

}
Run Code Online (Sandbox Code Playgroud)

我该如何转换void* argschar*[]?在myMethod(void*)

Dav*_*eri 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;
}
Run Code Online (Sandbox Code Playgroud)

正如@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;
}
Run Code Online (Sandbox Code Playgroud)

  • 我建议也要传递阵列中的细胞数量,以避免潜在的脱离 (4认同)