读书人

vector奇怪有关问题,望

发布时间: 2012-04-03 12:38:19 作者: rapoo

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());

读书人网 >C++

热点推荐