nqrseee 2023-01-28 11:48 采纳率: 0%
浏览 57

C 调用结构体函数时,打印参数乱码

问题 定义了一个结构体函数 然后将结构体作为返回值返回时正常 ,然后在另一个函数中调用函数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()时打印的参数

img

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 **}

  • 写回答

2条回答 默认 最新

  • a7464553 2023-01-28 12:54
    关注

    In file included from main.c:2:
    ./judgeparams.h:7:17: note: expected ‘struct paylod *’ but argument is of type ‘struct paylod **’
    7 | st_params *judgeparams(st_paylod *ld_params);

    这个问题可以通过修改main函数中调用add()函数的参数类型来解决,将&ld_params改为ld_params:
    int rc= add(ld_params);

    评论

报告相同问题?

问题事件

  • 创建了问题 1月28日