c - 通过 voidpointer 传递 char* args[]

标签 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*[]?在 myMethod(void*)?

最佳答案

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

关于c - 通过 voidpointer 传递 char* args[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29488921/

相关文章:

c - C 中的结构体大小

c++ - 指针参数和引用参数的区别?

c++ - 强制忽略重复符号?

c - 测试字符串是否仅包含字母数字

c - C 中的指针未按预期工作

c++ - 在 C++ 中删除 void 指针

c++ - 指向动态分配类的空指针

c - 为 C 类型添加额外的标签

c++ - 将指针分配给两个指针的按位或

C:检查数组是否包含相等的连续元素