使用指向C中所述数组的void指针将struct添加到struct数组

时间:2016-09-12 20:46:14

标签: c

让我说我有以下结构和该结构的数组:

struct Fileinfo {
  int ascii[128];  //space to store counts for each ASCII character.
  int lnlen;       //the longest line’s length
  int lnno;        //the longest line’s line number.
  char* filename;  //the file corresponding to the struct.
};

struct Analysis fileinfo_space[8]; //space for info about 8 files

我想要一个能为这个数组添加新结构的函数。它必须使用void指针指向将结构存储为参数的位置

int addentry(void* storagespace){
    *(struct Fileinfo *)res = ??? //cast the pointer to struct pointer and put an empty struct there
    (struct Fileinfo *)res->lnlen = 1; //change the lnlen value of the struct to 1
}

我的问题是:

  1. 代替什么?我根据this Stackoverflow响应尝试了(Fileinfo){NULL,0,0,NULL}。但我得到'错误:'Fileinfo'未声明(首次使用此功能)

  2. 如何创建指向数组的void指针? (void *)fileinfo_space是否正确?

  3. 我需要使用void *作为此赋值的函数的参数。这不取决于我。

1 个答案:

答案 0 :(得分:1)

假设你有一些内存块作为storagespace void指针传递:

你必须定义一个能够初始化的常量(除非你使用c ++ 11),让我们称之为init。 BTW你的赋值是错误的:第一个成员是一个int数组。您无法将NULL传递给它。只需将其填充为如下所示。

然后将void指针转换为结构上的指针,然后通过复制init结构进行初始化,随意修改...

int addentry(void* storagespace){
    static const struct Fileinfo init = {{0},0,0,NULL};
    struct Fileinfo *fi = (struct Fileinfo *)storagespace;
    *fi = init; //cast the pointer to struct pointer and put an empty struct there
    fi->lnlen = 1; //change the lnlen value of the struct to 1
}