免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 12256 | 回复: 46

还有人搞不清楚这个问题么? [复制链接]

论坛徽章:
0
发表于 2010-11-18 20:02 |显示全部楼层
本帖最后由 donotblock 于 2010-11-19 10:42 编辑

今天一之前的同事问我的问题:

a.h
  1. typedef struct {
  2.     char Message[20];
  3.     int code;
  4. } MyData;
复制代码
a.c
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "a.h"

  4. int getdata(void **p){
  5.   MyData d1;
  6.   strcpy(d1.Message,"aaabbbcccddd");
  7.   d1.code = 5;
  8.   (*p) = &d1;
  9.   return 0;
  10. }
复制代码
b.c
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "a.h"

  4. int main(void){
  5.   MyData *p1 = NULL;
  6.   getdata((void *)(&p1));
  7.   printf("%s\n",p1->Message);
  8.   return 0;
  9. }
复制代码
问我为什么不能正常输出

------------------------
附加新问题:

  1. int getint(void **P){
  2.     int i = 10;
  3.     (*p) = &i;
  4.     return 0;
  5. }

  6. int getstring(void **p){
  7.     char *s = "abcde";
  8.     (*p) = s;
  9.     return 0;
  10. }

  11. int getstring2(void **p){
  12.    char s[] = "abcde";
  13.    (*p) = s;
  14.    return 0;
  15. }
复制代码
这3个呢,哪个ok,哪个不行,为什么?

论坛徽章:
0
发表于 2010-11-18 20:24 |显示全部楼层
还用问么。~

论坛徽章:
0
发表于 2010-11-18 20:57 |显示全部楼层
int getdata(void **p){

这里应该是 int getdata(void *p)

论坛徽章:
0
发表于 2010-11-18 21:15 |显示全部楼层
这里应该是 int getdata(void *p)
DNFCF 发表于 2010-11-18 20:57



    不是这个问题

论坛徽章:
0
发表于 2010-11-18 21:26 |显示全部楼层
函数里是**p
而在main里,你传的是*p
这就不行了啊

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
发表于 2010-11-18 21:47 |显示全部楼层
栈。。。。。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
发表于 2010-11-18 22:05 |显示全部楼层
函数里是**p
而在main里,你传的是*p
这就不行了啊
DNFCF 发表于 2010-11-18 21:26


兄台,麻烦你看清一点。

论坛徽章:
0
发表于 2010-11-18 22:21 |显示全部楼层
今天一之前的同事问我的问题:

a.ha.cb.c问我为什么不能正常输出
donotblock 发表于 2010-11-18 20:02



    MyData d1;  为局部变量,作用域问题。getdata函数返回后,d1变量不再存在,指针指飞了。

论坛徽章:
0
发表于 2010-11-18 22:53 |显示全部楼层
  1. int getdata(void **p){
  2.   MyData *d1=malloc(sizeof(MyData));
  3.   strcpy(d1->Message,"aaabbbcccddd");
  4.   d1->code = 5;
  5.   (*p) = d1;
  6.   return 0;
  7. }
复制代码
  1. int main(void){
  2.   MyData *p1 = NULL;
  3.   getdata((void *)(&p1));
  4.   printf("%s\n",p1->Message);
  5.   free(p1);
  6.   return 0;
  7. }
复制代码

论坛徽章:
0
发表于 2010-11-18 23:26 |显示全部楼层
搞不清说明C还没入门
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP