我有一个函数
struct Analysis reduce (int n, void* results)
其中 n 是要分析的文件数,我将分析结构数组传递给结果。
分析结构定义如下:
struct Analysis {
int ascii[128]; //frequency of ascii characters in the file
int lineLength; //longest line in the file
int lineNum; //line number of longest line
char* filename;
}
我已经这样转换了 void *,
struct Analysis resArray[n];
struct Analysis* ptr = results;
resArray[0] = ptr[0];
但我不知道如何正确地迭代 resArray 。我试过了
for (i = 0; i < n; i++){
printf("lineLength: %d\n", resArray[i].lineLength);
}
当 n = 3 时,我得到了垃圾值。 resArray[0] 是正确的,但 resArray[1] 是一个非常高的数字,而 resArray[2] 只是 0。为什么 resArray[1] 或 resArray[2] 不给出正确的值?如果我错误地增加了地址,那么它是有意义的,但我只是在某个索引处访问数组。在这里迷路了!
最佳答案
resArray[0] 是正确的,因为有“东西”:
resArray[0] = ptr[0];
其他元素都是垃圾,因为您没有设置任何值。如果您想复制整个数组,您需要将复制方法更改为:
for (i = 0; i < n; i++)
{
resArray[i] = ptr[i];
}
关于C-迭代通过 void* 传递的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404854/