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中开辟存储空间去存储,之后在另一个函数中能对这个存储结构进行调用呢?
展开
 我来答
轻盈还清静的小比目鱼5
2013-12-18 · TA获得超过228个赞
知道答主
回答量:21
采纳率:0%
帮助的人:40.7万
展开全部

你最好重写你的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;
函数运行完,变量赋值保存;
追问
这样也没有对赋值的结构进行保存啊?您能说得再详细点吗?
追答
这个结构体定义的是全局变量,会有保存,function1(WORK,len,fd); 可以不带sp参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式