关于结构体赋值,很诡异的一个问题.

winner8080 2016-02-15 12:45:38
有这么一个结构体,和定义的全局变量
struct radius_server_cfg {
char ip_addr[17];
unsigned int port;
char key[64];
int modified_count;
};
struct radius_server_cfg server_cfg;


然后有3个函数分别对ip_addr和port, key复制,如下:
int set_radius_server_ip_addr(char *path, char *value)
{
strncpy(server_cfg.ip_addr, value, QWEBAPI_TR181_IP_STR_MAX_LEN);
printf("ADL %s, %d, ip = %s, port = %d, key = %s\n", __func__, __LINE__, server_cfg.ip_addr, server_cfg.port, server_cfg.key);
return 0;
}

先执行这个函数,打印的3个变量的值都是0,这是对的.
然后执行下面这个函数,
int qweb_set_radius_server_port(char *path, unsigned int port)
{
server_cfg.port = port;
printf("ADL %s, %d, ip = %s, port = %d, key = %s\n", __func__, __LINE__, server_cfg.ip_addr, server_cfg.port, server_cfg.key);
return 0;
}

问题就在这里了,
打印出来的ip的值怎么变成0了呢,此时能打印出port的值,因为刚刚赋值的
但是ip的值怎么是0呢,在调用第一个函数的时候已经给这个结构体中的ip_addr赋值了啊


请大侠帮忙解惑.
多谢
...全文
227 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
winner8080 2016-02-15
  • 打赏
  • 举报
回复
引用 3 楼 fly_dragon_fly 的回复:
strncpy执行后打印的变量是0, 这为什么是对的
晕死,我写错了。 执行完set_radius_server_ip_addr()后, 除了IP打印出正确的值外,另外几个值都是0.
fly_dragon_fly 2016-02-15
  • 打赏
  • 举报
回复
strncpy执行后打印的变量是0, 这为什么是对的
winner8080 2016-02-15
  • 打赏
  • 举报
回复
引用 1 楼 weixin_33887675 的回复:
我很好奇这个程序能编译通过?首先你没有把定义的结构体server_cfg传递给函数,而在函数内直接调用serve_cfg.ip。还有你的path指针在函数内没用到,建议把结构体地址作为实参传递给函数,char *path 改为struct radius_server_cfg *path ,函数内用path->ip即可。
server_cfg是个全局变量,所以没有通过参数传递. path没有使用是因为这个几个函数是回调函数,必须遵守回调的原型. 所以可以编译通过也可以运行,就是出现了问题.
biebiechai 2016-02-15
  • 打赏
  • 举报
回复
我很好奇这个程序能编译通过?首先你没有把定义的结构体server_cfg传递给函数,而在函数内直接调用serve_cfg.ip。还有你的path指针在函数内没用到,建议把结构体地址作为实参传递给函数,char *path 改为struct radius_server_cfg *path ,函数内用path->ip即可。
winner8080 2016-02-15
  • 打赏
  • 举报
回复
我知道原因了,但是不知道怎么解决。 另开了个帖子, http://bbs.csdn.net/topics/391902674

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧