Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > просмотр файлов каталога |
Автор: nas-alex 10.6.2004, 08:16 |
списсок содержит информацию о файлах дирректории, все строки выводит привильно, за исключением имени файла, выводит для всех строк имя последнего добавленного файла. не подскажете где ошибка в этом коде? у меня в этом списке 5 строк, содержащие информацию о файлах дирректории, все строки выводит привильно, за исключением имени файла, выводит для всех строк имя последнего добавленного файла. #include "stdafx.h" #include <windows.h> #include "stl.h" struct file_list { char *name; int size; }; typedef list<file_list> listfile; listfile lstfile; int main(int argc, char *argv[]) { file_list *fs=new file_list; HANDLE hFile; WIN32_FIND_DATA find; char *path="c:\\test\\*.*"; if(hFile=FindFirstFile(path,&find)) { fs->name=find.cFileName; fs->size=find.nFileSizeLow; lstfile.push_back(*fs); while(FindNextFile(hFile,&find)) { file_list *fs=new file_list; char file_name[13]; strncpy(file_name,find.cFileName,13); fs->name=file_name; fs->size=find.nFileSizeLow; lstfile.push_front(*fs); } } for (listfile::iterator it=lstfile.begin();it!=lstfile.end();it++) { printf("%s %d\n",it->name,it->size); } return 0; } |
Автор: AndyY 10.6.2004, 10:01 |
char file_name[13]; strncpy(file_name,find.cFileName,13); fs->name=file_name; ошибка тут. нужно: fs->name=strdup( find.cFileName ); и освободить, естественно, при убивании fs через free. а потом внимательно разобраться - какая переменная где хранится и каково время жизни переменных, которые в стеке сидят. |
Автор: Олег М 10.6.2004, 11:30 |
Andy Y в общем правильно подсказал, хотя можно и без динамического выделения памяти struct file_list { char name[MAX_PATH]; int size; }; ////////////////////////// if(hFile=FindFirstFile(path,&find)) { //fs->name=find.cFileName; strcpy(fs->name,find.cFileName); fs->size=find.nFileSizeLow; lstfile.push_back(*fs); while(FindNextFile(hFile,&find)) { |