问题 定义了一个结构体函数 然后将结构体作为返回值返回时正常 ,然后在另一个函数中调用函数jjudgeparams() 就会拿到一些乱码,要怎么解决呀
st_params *judgeparams(st_paylod *ld_params)
{
st_params *tp=malloc(sizeof(st_params));
//judge cmd params
if(strlen(ld_params->local_addrs_old)>0)
{
printf("aaaa\n");
memset(tp->loccaladd,0,sizeof(tp->loccaladd));
strncpy(tp->loccaladd,ld_params->local_addrs_old,strlen(ld_params->local_addrs_old)+1);
}else
{ printf("bbbb\n");
memset(tp->loccaladd,0,sizeof(tp->loccaladd));
printf("bbbbtest\n");
strncpy(tp->loccaladd,ld_params->local_ts,strlen(ld_params->local_ts)+1);
printf("tp.loccaladd看看这个参数对不对:%s\n",tp->loccaladd);
}
Return (tp);
}
int add(st_paylod *ld_params)
{
printf("test the params in function add \n");
st_params *tp= judgeparams(ld_params);
printf("tp->loccaladd:%s\n",tp->loccaladd);
printf("tp->loccaladd:%x\n",tp->loccaladd);
printf("tp->loccaladd:%x\n",&(*(tp->loccaladd)));
free(tp);
return 0;
}
调用add()时打印的参数
main函数 这样写的
int main()
{
st_paylod *ld_params;
memset(ld_params->local_ts,0, sizeof(ld_params->local_ts));
memset(ld_params->remote_ts,0, sizeof(ld_params->remote_ts));
memset(ld_params->local_addrs_old,0, sizeof(ld_params->local_addrs_old));
memset(ld_params->remote_addrs_old,0, sizeof(ld_params->remote_addrs_old));
strncpy(ld_params->local_ts, "1.1.1.1",strlen("1.1.1.1"));
strncpy(ld_params->remote_ts, "3.3.3.3", strlen("3.3.3.3"));
strncpy(ld_params->local_addrs_old, "", strlen(""));
strncpy(ld_params->remote_addrs_old, "", strlen(""));
ld_params->local_mask=23;
ld_params->remote_mask=23;
ld_params->local_mask_old=0;
ld_params->remote_mask_old=0;
// st_params *tp= judgeparams(ld_params);
printf("addfunction\n");
int rc= add(&ld_params);
return 0;
}
Main 函数编译的时候提示了我这个
warning: passing argument 1 of ‘addiptables’ from incompatible pointer type [-Wincompatible-pointer-types]
252 | int rc= addiptables(&ld_params);
| ^~~~~~~~~~
| |
| st_paylod ** {aka struct paylod **}