首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vector奇怪有关问题,望

2012-04-03 
vector奇怪问题,望高手指点.代码如下://程序功能:打印给定目录下mp3文件名#includevector#includeiostr

vector奇怪问题,望高手指点.
代码如下:

//程序功能:打印给定目录下mp3文件名
#include   <vector>
#include   <iostream>
#include   <windows.h>
#include   <shlobj.h>     //浏览目录对话框用
using   namespace   std;

vector <char*>   v;     //定义全局容变量v

void   Test   ()
{
TCHAR   szDis[MAX_PATH];
TCHAR   szPath[MAX_PATH];
szPath[0]= '\0 ';

BROWSEINFO   bi={0};
bi.hwndOwner   =   NULL;
bi.pidlRoot   =   NULL;
bi.pszDisplayName   =   szDis;
        bi.lpszTitle   =   "选择目标文件夹 ";
bi.ulFlags   =   BIF_RETURNONLYFSDIRS;

LPITEMIDLIST   pItem   =   SHBrowseForFolder(&bi);//弹出浏览目录对话框

SHGetPathFromIDList(pItem,szPath);   //获得目标文件夹路径存入szPath
strcat(szPath, "\\*.mp3 ");

//通过FindFristFile和FindNextFile获取目录下扩展名为mp3的文件名

WIN32_FIND_DATA   findData;
HANDLE   hFindFile   =   FindFirstFile(szPath,&findData);

if(hFindFile   !=   INVALID_HANDLE_VALUE)
{
int   i=0;
do
{      
v.push_back   (findData.cFileName   );   //将获得的文件名存入容器v

cout < <v[i++] < <endl;                               //   ****打印文件名*****

}
while(FindNextFile(hFindFile,&findData));
cout < <endl;                         //空一行
FindClose(hFindFile);
        //****第2次打印容器v中所有文件名*****
for(i=0;i <v.size   ();i++)                  
      cout < <v[i] < <endl;
cout < <endl;
}

}


int   main   (int       argc,       char*       argv[])
{
int   i=0;
Test();

              cout < <v.size() < <endl;
      //再次打印容器中所有的文件名
      for(;i <v.size   ();i++)
      cout < <v[i] < <endl;
return   0;
}

我是在写windows应用程序时遇到的问题,不知道怎么回事,就截取问题部分用控制台试试,结果问题一样.
问题:
为什么3次输出的结果都不一样?
第一次是预期的结果,第二次vector容器内所以对象都是一样的.
第三次就更奇怪了全是空的.
输出的结果:
周杰伦   -   以父之名.mp3
周杰伦_温岚   -   屋顶.mp3
TANK   -   三国恋.mp3
TANK   -   专属天使.mp3
Twins   -   我们相爱6年.mp3
阿牛   -   桃花朵朵开.mp3
安又琪     -   失恋的人不能听.mp3
蔡依林   -   爱情三十六计.mp3
蔡依林   -   布拉格广场.mp3
蔡依林   -   倒带.mp3
蔡依林   -   海盗.mp3

蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3
蔡依林   -   海盗.mp3

11
GF@
GF@
GF@
GF@
GF@
GF@
GF@
GF@
GF@
GF@
GF@
Press   any   key   to   continue



[解决办法]
原因不明.使用替代方案 vector <string> v;后可以正常运行.(#include <string> )


[解决办法]
v.push_back (findData.cFileName ); //将获得的文件名存入容器

你使用vector <char*> 的时候只是将findData.cFileName的首地址存入 容器中
在下一次FindNextFile的时候内容其指针的内容已经失效.
所以无法正常输出
使用vector <string> 的时候每次将得到的文件名字复制了一份,所以能正常显示.
[解决办法]
InserItem(hwnd,v[i].c_str());

热点排行