C-迭代通过 void* 传递的结构数组

标签 c arrays struct iteration void-pointers

我有一个函数

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/

相关文章:

c++ - 局部数组长度与从函数调用时不同

javascript - 如何使用 for in 循环动态填充数组

c++ - 在 C 中使 struct fields const

c++如何在结构 vector 的一个字段上创建迭代器

c - 编译时访问的文件列表

c - 如何连接字符和字符串/How to make char to string

java - 用 C 或 Java 捕获操纵杆输入

c - c中带指针的运算符优先级

c++ - 使用推力根据索引更改某些元素的值

c - fgets 无法正常工作