用原子哥的一段代码改,目的就是想把读取到的文件名缓存到
*fnbuf[10]中,方便后续选择文件操作,然后做了个测试代码
橙色代码部分都正常,就是到红色那一行,文件名就显示不对,不知哪里问题,是否是指针数组操作有问题?因为刚学C,很多的地方不懂
void
File_Browse(u8 *path)
{ u8 i;
u8 res;
u16 rval=0;
DIR tdir;
//临时目录
FILINFO tfileinfo; //临时文件信息
u8 *fn;
u8 *fnbuf[10];
u8
file_cur=0;
  OINT_COLOR=BLACK;
LCD_ShowString(10,5,path_curr);//显示当前目录
res=f_opendir(&tdir,(const TCHAR*)path); //打开目录
tfileinfo.lfsize=_MAX_LFN*2+1; //长文件名最大长度
tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize); //为长文件缓存区分配内存
  OINT_COLOR=BLUE;
if(res==FR_OK&&tfileinfo.lfname!=NULL)
{i=0;
while(1)//查询总的有效文件数
{
res=f_readdir(&tdir,&tfileinfo); //读取目录下的一个文件
if(res!=FR_OK||tfileinfo.fname[0]==0)break; //错误了/到末尾了,退出
fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname); //取得文件名
fnbuf=fn;//缓存文件名
//Show_Str(30,20+i*20,fn,16,0x00); ///这一句OK
Show_Str(30,20+10*20,fnbuf,16,0x00); //这一句OK
i++;
}
//^^^^^^^^^到这里,文件名列表显示都正常
LCD_FILL(WHITE);//清屏
  OINT_COLOR=RED;
Show_Str(30,20+10*20,fnbuf[1],16,0x00);//!!!<----这里文件名就显示不正常了,空白,或者乱码
while(1)///仅仅测试文件名能不能被正确保存下来,加个死循环,方便查看效果
{}
}
myfree(SRAMIN,tfileinfo.lfname);
}
|