Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> просмотр файлов каталога, не подскажете где ошибка в этом коде? 
:(
    Опции темы
nas-alex
  Дата 10.6.2004, 08:16 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
Дата 10.6.2004, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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.

а потом внимательно разобраться - какая переменная где хранится и каково время жизни переменных, которые в стеке сидят.


--------------------
PM MAIL WWW   Вверх
Олег М
Дата 10.6.2004, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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))
{

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.