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

[复制链接]
2864|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还是自己试一下吧,不同的编译器可以得到不同的结果

问题出在编译器的不同实现。
 楼主| 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要加上数组大小,这个不知道为什么,我仅仅是要一个指针而已!!
liqimcu 发表于 2007-8-18 17:08 | 显示全部楼层
liqimcu 发表于 2007-8-18 17:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

46

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部