Перейти к содержанию

C++ прогерам тупо поржать, а мне интересно...


Рекомендуемые сообщения

Ну вот скажем... Тупо под консольку код 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????

Ссылка на сообщение
Поделиться на другие сайты
 

...

Вот пля тупой вопрос - почему в конечном итоге массив name2 во всех элементах принимает последнее значение cFileName????

name2 хранит не сами строки, а их адреса в памяти.

Если d.cFileName тоже char *, то получается что в name2[m] записывается не копия d.cFileName, а адрес этой строки в памяти. В следующем проходе цикла по этому же адресу хранится уже имя следующего файла. Когда цикл заканчивается, имеем массив name2, каждый элемент которого - адрес d.cFileName, а там - имя последнего файла.

По-моему так.

Изменено пользователем Storm
Ссылка на сообщение
Поделиться на другие сайты
 

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.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...