如何使用sprintf追加字符串?

2019-07-21 03:30发布

本帖最后由 vegetablebird 于 2019-4-4 16:43 编辑

想在循环中使用sprintf追加字符串,但是每次只显示最后一次的结果。网上查了一下,sprintf每次都会在结尾加上'',导致覆盖前一次的内容。现在需要遍历SD卡一个文件夹内所以文件名,并追加到一个字符串,而不是每查一个文件名就发送一次,请问应该怎么做?
[mw_shl_code=c,true]u8 mf_scan_files(u8 * path)
{        
        FRESULT res;
                char *p;
    char *fn;   /* This function is assuming non-Unicode cfg. */
                char *fnn;
#if _USE_LFN
         fileinfo.lfsize = _MAX_LFN * 2 + 1;
        fileinfo.lfname = mymalloc(SRAMIN,fileinfo.lfsize);
#endif                  

    res = f_opendir(&dir,(const TCHAR*)path); //′ò¿aò»¸öĿ¼
    if (res == FR_OK)
        {        
                while(1)
                {
                res = f_readdir(&dir, &fileinfo);                   //¶áè¡Ä¿Â¼ÏÂμÄò»¸öÎļt
                if (res != FR_OK || fileinfo.fname[0] == 0) break;  //′íÎóáË/μ½Ä©Î2áË,íË3ö
                //if (fileinfo.fname[0] == '.') continue;             //oöÂÔéϼ¶Ä¿Â¼
#if _USE_LFN
                fn = *fileinfo.lfname ? fileinfo.lfname : fileinfo.fname;
#else                                                           
                fn = fileinfo.fname;
#endif                                                      /* It is a file. */
                        printf("%s/", path);//′òó¡Â·¾¶        
                        printf("%s ",fn);//′òó¡ÎļtÃû                 
                        p=mymalloc(SRAMIN,32);                                                        //éêÇë32×Ö½úÄú′æ
                        sprintf((char*)p,"%s",fn);
                        u3_printf(fn);
                }
               
  }         
        
        myfree(SRAMIN,fileinfo.lfname);
        myfree(SRAMIN,p);
    return res;         
}[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
nashui_sx
1楼-- · 2019-07-21 07:25
本帖最后由 nashui_sx 于 2019-4-4 20:43 编辑

sprintf 里面的buf每次偏移自身长度不就可以了,最好每个文件名加个非分割 ,后期不然处理也麻烦

sprintf((char*)(p+strlen(p)),"%s ",fn);
记得申请p后,*p=0;防止第一次strlen(p)有问题

vegetablebird
2楼-- · 2019-07-21 11:27
nashui_sx 发表于 2019-4-4 20:41
sprintf 里面的buf每次偏移自身长度不就可以了,最好每个文件名加个非分割 ,后期不然处理也麻烦

spri ...

1111.jpg 改完之后还是不行,只显示最后一首歌的名字。
11.jpg



nashui_sx
3楼-- · 2019-07-21 11:33
 精彩回答 2  元偷偷看……
vegetablebird
4楼-- · 2019-07-21 13:55
nashui_sx 发表于 2019-4-4 21:20
申请p不放在循环外面?还只申请32?

可以了,非常感谢!太粗心了,只忙着拷贝过来没有注意好
nashui_sx
5楼-- · 2019-07-21 14:08
vegetablebird 发表于 2019-4-4 21:28
可以了,非常感谢!太粗心了,只忙着拷贝过来没有注意好

记得申请p后,*p=0;防止第一次strlen(p)有问题
还有这也只是应你的需求的办法,要用还是数组存吧,这样拼接的处理也麻烦,还不如数组呢
vegetablebird
6楼-- · 2019-07-21 18:50
 精彩回答 2  元偷偷看……

一周热门 更多>