gpt4 book ai didi

c - c中静态数组的广义函数

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:59 24 4
gpt4 key购买 nike

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

(相关的)代码:

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";
}
}

最佳答案

你的意思是这样的吗?

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))

关于c - c中静态数组的广义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13700021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com