| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 250 人关注过本帖
标题:一个结构的处理疑问?
只看楼主 加入收藏
pigy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-9
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
一个结构的处理疑问?
以下是一个简单程序,想输出结构的内容,请大家指点下,万分感谢!
typedef struct DATA_STRU{
    int len;
    char *pdata;//指向要输出的数据缓冲,用指针是想让其可以指向任意大的数组或字符串
}DATA;

char string1[] = {"abcd"};
//char string2[] = {"efghiskkl"};

void put_data(char *pbuf, int len)
{
      int i;
      char *pbuffer = pbuf;

      for (i = 0; i < len; i++)
     {
          out_data(*pbuffer++);//输出到终端的函数
     }
}

void main(void)
{
    DATA g_data;
   
    g_data.len = strlen(string1);
    g_data.pdata = ?;//请问这个要怎么取string1的值,让下面的函数调用后可以输出string1的内容呢?

    put_data(&g_data.a1, (g_data.len + sizeof(int)));
}

我用g_data.pdata=string1,输出的值为string1的地址值,而非string1的内容abcd!请问要怎么取值成行,或者结构要如何更改呢?
搜索更多相关主题的帖子: 字符串 
2011-06-09 16:23
pigy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-9
收藏
得分:0 
难道这问题很小白!没人指点下么!
2011-06-09 16:35
不归鹄
Rank: 9Rank: 9Rank: 9
来 自:冥王星
等 级:蜘蛛侠
威 望:4
帖 子:491
专家分:1380
注 册:2009-12-20
收藏
得分:20 
传参数的时候为什么用 “&g_data.a1”?好像是g_data.pdata吧,而且不是传地址,因为这个成员本身就是地址,传值就行了,要不你输出的就是指针的地址啦

2011-06-09 16:46
不归鹄
Rank: 9Rank: 9Rank: 9
来 自:冥王星
等 级:蜘蛛侠
威 望:4
帖 子:491
专家分:1380
注 册:2009-12-20
收藏
得分:0 
贴代码的时候用这个,这样好阅读点,点击
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码
……
……

而且最好把全部代码贴出来,要不看不懂的。看别人的代码的时候不怕多,就怕不完整,这就像破解别人的程序一样

2011-06-09 16:50
不归鹄
Rank: 9Rank: 9Rank: 9
来 自:冥王星
等 级:蜘蛛侠
威 望:4
帖 子:491
专家分:1380
注 册:2009-12-20
收藏
得分:0 
我改了一下你的“put_data”函数
程序代码:
#include<stdio.h>

typedef struct DATA_STRU{
    int len;
    char *pdata;/*指向要输出的数据缓冲,用指针是想让其可以指向任意大的数组或字符串*/
}DATA;

char string1[] = {"abcd"};
/*char string2[] = {"efghiskkl"};*/

void put_data(char *pbuf, int len)
{
    int i;
    char *pbuffer = pbuf;
   
    printf("      length:%d\ncharacter string:%s\n\n",len,pbuffer);
}

void main(void)
{
    DATA g_data;
    g_data.len = strlen(string1);
    g_data.pdata = string1;/*/请问这个要怎么取string1的值,让下面的函数调用后可以输出string1的内容呢?*/
    put_data(g_data.pdata, (g_data.len + sizeof(int)));
    system("pause");
}

结果
图片附件: 游客没有浏览图片的权限,请 登录注册

你要的是不是这样

2011-06-09 17:04
pigy
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-6-9
收藏
得分:0 
程序代码:
我这函数的整体要求是输出结构体内的内容,其中put_data函数是其它封装好的库,功能是输出pbuf指向的地址的len个数据(此函数假设无法变动)
typedef struct DATA_HEADER_STRU{
    char bTag;
    char bTagInverse;
    int  len;
}DATA_HEADER;

typedef struct DATA_STRU{
    DATA_HEADER  data_header;  //对下面指向的数据的修饰头
    char         *pdata;       //指向要输出的数据缓冲,用指针是想让其可以指向任意大的数组或字符串
}DATA;

char string1[] = {"abcd"};
//char string2[] = {"efghiskkl"};

//设此函数不变动
void put_data(char *pbuf, int len)
{
      int i;
      char *pbuffer = pbuf;

     for (i = 0; i < len; i++)
     {
          out_data(*pbuffer++);//此功能函数被封装无法改,输出pbuffer地址的内容.
     }
}

//输出结构中内容
void main(void)
{
    DATA g_data;
   
    g_data.data_header.bTag = 0x01;
    g_data.data_header.bTagInverse = ~g_data.data_header.bTag;
    g_data.data_header.len= strlen(string1);
    g_data.pdata = string1;//请问这个要怎么取string1的值,让下面的函数调用后可以输出string1的内容呢?

    put_data(&g_data.data_header, (g_data.data_header.len + sizeof(DATA_HEADER)));
} 


这样操作后,会输出0x01 0xFE string1长度 string1地址值(非string1的内容);,我是想怎么在不变动put_data函数的情况下,通过变动结构体或其它的,通过调用put_data函数输出正确的内容呢?即0x01 0xFE string1长度 string1内容 ,谢谢!


[ 本帖最后由 pigy 于 2011-6-9 23:17 编辑 ]
2011-06-09 23:14
快速回复:一个结构的处理疑问?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023965 second(s), 10 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved