我正在尝试编写一个通用函数来打印数组的元素。这就是我所拥有的:

void printArray(void * source, int numElements, int size, void (*printFunction)(void *)){

     void *dest[numElements];
     memcpy(dest, &source, (size * nElem));
     int i;
     for (i = 0; i < numElements; i++){
         printFunction(dest[i]);
     }
 }


我要传入数组的地址,数组中元素的数量,数组中每个元素的大小,以及用于处理数组类型的打印/格式化的回调函数(打印函数可以正常工作,我已经测试过了。

现在,它正在打印出第一个元素,然后出现了分段错误。我在找出问题所在时遇到了麻烦-任何帮助将不胜感激。我是stackoverflow的新手,所以让我知道我是否可以改善我的问题。

最佳答案

你为什么要复印?

您真正想要的是传递一个char指针,这样您可以将其递增
size0numElements次,每次都将其传递给printFunction。

请注意,实际上您已经编写了比仅打印数组更通用的函数。您正在有效地编写一个“映射”函数,该函数将一个函数映射到一个数组上。

这样的事情应该可以工作(请注意,未经测试):



void printArray(void * source, int numElements, int size, void (*printFunction)(void *)){
    int i;
    for (i = 0; i < numElements; i++){
        printFunction(((char *)source) + i * size);
     }
}

09-10 05:20
查看更多