![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
nas-alex |
|
|||
Unregistered |
списсок содержит информацию о файлах дирректории, все строки выводит привильно, за исключением имени файла, выводит для всех строк имя последнего добавленного файла. не подскажете где ошибка в этом коде? у меня в этом списке 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 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
char file_name[13];
strncpy(file_name,find.cFileName,13); fs->name=file_name; ошибка тут. нужно: fs->name=strdup( find.cFileName ); и освободить, естественно, при убивании fs через free. а потом внимательно разобраться - какая переменная где хранится и каково время жизни переменных, которые в стеке сидят. |
|||
|
||||
Олег М |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
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)) { |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |