主题 : 怪怪的c指针数组问题。 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 5195
精华: 0
发帖: 24
金钱: 140 两
威望: 52 点
贡献值: 0 点
综合积分: 48 分
注册时间: 2009-04-13
最后登录: 2014-04-30
楼主  发表于: 2011-08-11 23:08

 怪怪的c指针数组问题。

今天本来是改一个东西,要打印出一组字符,我用下面的方式做的。
const    char    *pt_cmdlist[]=
{
"R:read address of mcu.\n",
"W:write something into mcu.\n",
"RF:read address of flash.\n",
"WF:write something in flash.\n",
"RX:read address of flash.\n",
"\0"
};

void    PrintfCmdList(void)
{
    uint8    i=0;
    while(*pt_cmdlist!='\0')
    {
        UART0ConstSendStr(pt_cmdlist[i++]);//UART0SendStr函数没问题,打印字符串常量,遇到\0结束。
    }
}

运行结果很奇怪,如果我用hjtag单步运行的话,打印完全正常:

R:read address of mcu.
W:write something into mcu.
RF:read address of flash.
WF:write something in flash.
RX:read address of flash.
”。
但是如果下载到flash中跑,或者hjtag直接运行的话都打印出:“R:read address of mcu.u.\n”就复位了,注意,比正常的“R:read address of mcu.”多出三个字符。
请问各位怎么回事啊?
级别: 新手上路
UID: 5195
精华: 0
发帖: 24
金钱: 140 两
威望: 52 点
贡献值: 0 点
综合积分: 48 分
注册时间: 2009-04-13
最后登录: 2014-04-30
1楼  发表于: 2011-08-11 23:32
对不起,贴错了void    PrintfCmdList(void)里面那个while循环应该是while(*pt_cmdlist!='\0'),不好意思。好像[]打不上去。
另外我刚才又做了两个实验:
1.只要单步运行到while(*pt_cmdlist!='\0')处(此时还为开始循环,只是刚到这里),就能保证程序能正常打印,而且不会重启。
2.在linux中,程序能正常打印,但是最后有段错误。
[ 此帖被darktempla在2011-08-11 23:39重新编辑 ]
级别: 新手上路
UID: 5195
精华: 0
发帖: 24
金钱: 140 两
威望: 52 点
贡献值: 0 点
综合积分: 48 分
注册时间: 2009-04-13
最后登录: 2014-04-30
2楼  发表于: 2011-08-11 23:32
while(*pt_cmdlist[1]!='\0')