C语言结构体存储问题
自定义了一个放有很多参数的结构体structsnmp_seq,变量spstructsnmp_seq{intget_snmp[BUFFER_SIZE];inttotal_l...
自定义了一个放有很多参数的结构体struct snmp_seq,变量sp
struct snmp_seq
{
int get_snmp[BUFFER_SIZE];
int total_length;
int version;//版本号
int community[BUFFER_SIZE];//团体关键字
int command;//PUD类型
int reqid[BUFFER_SIZE];//请求标识
int errstat;//错误状态
int errindex;//错误索引
int pdu_type_start;
int errorstatus_start;
int errorIndex_start;
int oid_value_start;
int varbing_start;
struct variable_list//绑定变量
{
int oid_name[BUFFER_SIZE];//OID值
int oid_len;//OID长度
int value_type;//变量值的类型
int value_len;//变量值的长度
int oid_value;//变量值的值
}val;
}sp;
function1(sp, WORK,len,fd);
调用函数,将结构体变量sp带入,对WORK进行处理,将处理的结果在函数function1中,通过sp.xxxx赋值。
如果function1函数结束返回,那结构体struct snmp_seq中的赋值就都会消失,
我如何在function1中开辟存储空间去存储,之后在另一个函数中能对这个存储结构进行调用呢? 展开
struct snmp_seq
{
int get_snmp[BUFFER_SIZE];
int total_length;
int version;//版本号
int community[BUFFER_SIZE];//团体关键字
int command;//PUD类型
int reqid[BUFFER_SIZE];//请求标识
int errstat;//错误状态
int errindex;//错误索引
int pdu_type_start;
int errorstatus_start;
int errorIndex_start;
int oid_value_start;
int varbing_start;
struct variable_list//绑定变量
{
int oid_name[BUFFER_SIZE];//OID值
int oid_len;//OID长度
int value_type;//变量值的类型
int value_len;//变量值的长度
int oid_value;//变量值的值
}val;
}sp;
function1(sp, WORK,len,fd);
调用函数,将结构体变量sp带入,对WORK进行处理,将处理的结果在函数function1中,通过sp.xxxx赋值。
如果function1函数结束返回,那结构体struct snmp_seq中的赋值就都会消失,
我如何在function1中开辟存储空间去存储,之后在另一个函数中能对这个存储结构进行调用呢? 展开
2个回答
展开全部
你最好重写你的function1,因为你function1(sp, WORK,len,fd);
这样调用函数时参数都是值传递,也就是相当于把sp中的参数值复制了一份给function1使用,函数执行完退出后,这些值的空间也就被释放了,所以sp中的值没有改变。你可以这样写:
typedef struct //绑定变量
{
int oid_name[BUFFER_SIZE];//OID值
int oid_len;//OID长度
int value_type;//变量值的类型
int value_len;//变量值的长度
int oid_value;//变量值的值
}variable_list_t;
typedef struct
{
int get_snmp[BUFFER_SIZE];
int total_length;
int version;//版本号
int community[BUFFER_SIZE];//团体关键字
int command;//PUD类型
int reqid[BUFFER_SIZE];//请求标识
int errstat;//错误状态
int errindex;//错误索引
int pdu_type_start;
int errorstatus_start;
int errorIndex_start;
int oid_value_start;
int varbing_start;
variable_list_t val;
}SNMP_t;
void main(void){
SNMP_t sp;
function1(&sp, WORK,len,fd);
}
function1(SNMP_t* snmp, WorkType work, int len, int fd){
snmp->total_length=work.xxx;
...
}
不知道你能看懂这段代码吗?其实最核心的问题是你要想在函数退出后改变函数参数的值,就必须使用地址传递
2013-12-18
展开全部
直接将结构体设置成变量如
typedef struct
{
...
}snmp_seq;
snmp_seq sp;
然后再function1里直接对变量sp操作,如sp.xxx= xxx;
函数运行完,变量赋值保存;
typedef struct
{
...
}snmp_seq;
snmp_seq sp;
然后再function1里直接对变量sp操作,如sp.xxx= xxx;
函数运行完,变量赋值保存;
追问
这样也没有对赋值的结构进行保存啊?您能说得再详细点吗?
追答
这个结构体定义的是全局变量,会有保存,function1(WORK,len,fd); 可以不带sp参数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询