SLI=Hetzer_34= 10 Жалоба Share Опубликовано 7 мая, 2010 Ну вот скажем... Тупо под консольку код c++ - поиск файлов в папке. #include "stdafx.h" #include <windows.h> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int m=0; char * name2[255]={}; WIN32_FIND_DATA d; HANDLE h; h=FindFirstFile("*.*",&d); int i=1; while(i) {if (d.cFileName[0]!='.') { cout<<d.cFileName<<endl; name2[m]=d.cFileName; cout<<name2[m]<<endl; m++;}; i=FindNextFile(h,&d); } cout<<endl; for(int i=0;i<m;i++) cout<<name2[i]<<endl; return 0; } Вот пля тупой вопрос - почему в конечном итоге массив name2 во всех элементах принимает последнее значение cFileName???? Цитата Ссылка на сообщение Поделиться на другие сайты
Storm 43 Жалоба Share Опубликовано 7 мая, 2010 (изменено) ... Вот пля тупой вопрос - почему в конечном итоге массив name2 во всех элементах принимает последнее значение cFileName???? name2 хранит не сами строки, а их адреса в памяти. Если d.cFileName тоже char *, то получается что в name2[m] записывается не копия d.cFileName, а адрес этой строки в памяти. В следующем проходе цикла по этому же адресу хранится уже имя следующего файла. Когда цикл заканчивается, имеем массив name2, каждый элемент которого - адрес d.cFileName, а там - имя последнего файла. По-моему так. Изменено 7 мая, 2010 пользователем Storm Цитата Ссылка на сообщение Поделиться на другие сайты
SLI=Hetzer_34= 10 Автор Жалоба Share Опубликовано 8 мая, 2010 name2 хранит не сами строки, а их адреса в памяти. Если d.cFileName тоже char *, то получается что в name2[m] записывается не копия d.cFileName, а адрес этой строки в памяти. В следующем проходе цикла по этому же адресу хранится уже имя следующего файла. Когда цикл заканчивается, имеем массив name2, каждый элемент которого - адрес d.cFileName, а там - имя последнего файла. По-моему так. пилять... )))) Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.