1

我有一些不同大小的结构的静态数组,我希望创建一个填充这些数组的通用函数,我希望将特定数组填充为该函数的参数。最好的方法是什么?(除了避免使用静态数组,遗憾的是他们无能为力)。

(相关位)代码:

typedef struct{
    char ip[IP_LEN+1];
    char netmask[IP_LEN+1];
} ipAndNetmaskStruct; 
typedef struct{
    char port[PORT_LEN+1];
} portStruct;


static ipAndNetmaskStruct source[1024];
static ipAndNetmaskStruct dest[1024];
static portStruct source_port[1024];
static portStruct dest_port[1024];

//just an example of wha
void doSomthingWithStruct(the array and a specific field in each stcut in it){
    for(int i=0;i<5;i++){
        THEARRAY[i].SPECIFICFIELD="Somthing";
        // as in source[i].ip="somthing";
    }
}
4

1 回答 1

1

你的意思是这样的吗?

void doSomethingWithStruct(void* structptr,int ssize,int cnt, int offset,void* val,int vsize)
{
   int i;
   for(i=0;i<cnt;i++)
   {
      //perhaps add bool as a function parameter to check if mem should be allocated ?
      memcpy( ((uint8_t*)structptr)+i*ssize+offset, val,vsize);
   }
}

//usage
typedef struct{
    char ip[IP_LEN+1];
    char netmask[IP_LEN+1];
} ipAndNetmaskStruct; 
static ipAndNetmaskStruct source[1024];
char data[IP_LEN+1];

doSomethingWithStruct(source,sizeof(ipAndNetmaskStruct),1024,/*if it was netmask it would have been sizeof(char)*(IP_LEN+1)*/0,data,IP_LEN+1);

编辑:您可以使用offsetof获取成员的偏移量 - 在“stddef.h”中定义,并且本着您也可以使用的精神#define sizeof_member(s,m) sizeof(((s *)0)->m)

例子:

#define doSomethingWithStruct(srcptr,type,member,val) doSomethingWithStruct(srcptr,sizeof(type),sizeof(srcptr)/sizeof(type),offsetof(type,member),val,sizeof_member(type,member))
于 2012-12-04T10:13:27.047 回答