免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2013 | 回复: 9

[函数] 不是蛋疼,而是真遇到是三级指针的问题 [复制链接]

论坛徽章:
0
发表于 2013-01-11 20:20 |显示全部楼层
程序调用逻辑是这样:

int func2(char ***fbuf2) {
    char data[100];
//data[]赋值操作
    memcpy((**fbuf2), data, 100);
}

int func1(char **fbuf1) {
   func2(&(*fbuf1));
}

int main() {
...
char *tmpbuf = (char *)malloc(100);
if(tmpbuf == NULL) {
  return;
}
func1(&tmpbuf);
}

func2中的赋值该怎么写,上面的写法不对,执行的时候段错误,,现在脑子浆糊了。再次声明我不是闲得蛋疼搞这么个问题,,而是实际中需要这么操作,,望大家赐教一下下。。

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2013-01-11 20:23 |显示全部楼层
从你这些代码看,连两级指针都不需要用

论坛徽章:
0
发表于 2013-01-11 20:26 |显示全部楼层
这个调用过程是不能改的。。该怎么弄。。回复 2# hellioncu


   

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
发表于 2013-01-11 20:30 |显示全部楼层

从LZ的函数逻辑来看, 一级指针就够用了.

int func2(void *buf)
{
    char data[100];

    memcpy(buf, data, 100);
}

int func1(void *buf)
{
    func2(buf);
}

int main(void)
{
    char *buf = malloc(100);

    func1(buf);

    free(buf);
}

论坛徽章:
0
发表于 2013-01-11 20:36 |显示全部楼层
这样不行的,段错误。。回复 4# captivated


   

论坛徽章:
3
15-16赛季CBA联赛之山东
日期:2016-10-30 08:47:3015-16赛季CBA联赛之佛山
日期:2016-12-17 00:06:31CU十四周年纪念徽章
日期:2017-12-03 01:04:02
发表于 2013-01-11 20:54 |显示全部楼层
回复 5# RUNONMIPS


    我的那段会段错误? 确定吗{:3_182:}

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
发表于 2013-01-11 21:06 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
发表于 2013-01-11 21:39 |显示全部楼层
RUNONMIPS 发表于 2013-01-11 20:36
这样不行的,段错误。。回复 4# captivated


lz怪叔叔木有错。是你已步入魔道。

论坛徽章:
0
发表于 2013-01-11 21:45 |显示全部楼层
本帖最后由 timothyqiu 于 2013-01-11 21:45 编辑
  1. int func2(char ***fbuf2) {
  2. ...
  3. }
  4. int func1(char **fbuf1) {
  5.    func2(&(*fbuf1)); /* 写 &(*fbuf1) 和写 fbuf1 一样*/
  6. }
复制代码
你的 func2 要的是 char ***,你传给它的是 char **……

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
发表于 2013-01-11 22:21 |显示全部楼层
别以为写的代码看上去难度大就是牛逼,有一种设计叫过渡设计
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP