打印

请教一下C语言的指针和数组的问题

[复制链接]
1907|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yoohoo|  楼主 | 2007-8-16 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有如下:
typedef unsigned char BYTE;
typedef struct
{   
    unsigned char *memberstr;
}struct1;

typedef struct
{
    struct1 *(*grp)[];
}struct2;

struct1 member1=
{
    "member1str"
};

struct1 *Group[]=
{
    &member1,
};

struct2 example1[]=
{
    Group,
};

void main(void)
{
    printf("ex=%s ",(*example1[0].grp[0])->memberstr);
    return;
}
请问一下,printf是否能输出我所想要的输出字符串"member1str"?

相关帖子

沙发
su_mj000| | 2007-8-17 06:02 | 只看该作者

在嵌入式的应用中,由于哈佛结构的MCU,

你可能得不到所想要得输出。

"%s"的格式默认指针指向RAM。而你的代码好像将字符存在ROM中。

typedef struct
{
    struct1 *(*grp)[];
}struct2;

使用特权

评论回复
板凳
yoohoo|  楼主 | 2007-8-17 08:31 | 只看该作者

是的,原来是定义在code里面的,

因为为了说明问题,所以就用上位机的函数输出了。

不过 ,我用keil编译,烧录程序,运行时总是得不到我要的数据,

后来用gcc编译了,修改了一些小的地方,是可以输出正确的,不知道问题出在哪里?

使用特权

评论回复
地板
平常人| | 2007-8-17 21:35 | 只看该作者

LZ还是自己试一下吧,不同的编译器可以得到不同的结果

问题出在编译器的不同实现。

使用特权

评论回复
5
yoohoo|  楼主 | 2007-8-18 10:03 | 只看该作者

问题找到了

原来是keil的关键字code惹的祸,
struct1 *Group[]=
{
    &member1,
};
这个定义里面,在keil里面,我是定义在code区的,所以按造以前的思路,就这样了
struct1 code *Group[]=
{
    &member1,
};
后来发现没有code却可以的,看了cx51的编译手册,如果有指针的话,好像说这样的话,就有一点不一样了,后来,我根据例子,改成了
struct1* code Group[]=
{
    &member1,
};
这样就可以了。
不过新的问题是,那个
struct2 example1[]=
{
    Group,
};
的定义,我通过sizeof ((*example1[0].grp)[])无法得到那个数组的大小。而且实际当中用的话,grp要加上数组大小,这个不知道为什么,我仅仅是要一个指针而已!!

使用特权

评论回复
6
liqimcu| | 2007-8-18 17:08 | 只看该作者

kldn.

使用特权

评论回复
7
liqimcu| | 2007-8-18 17:08 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

46

帖子

0

粉丝