ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

02.05.2009, 15:37
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
как-то так.. )
Код:
#include <windows.h>
#include <stdio.h>
#include <string>
using namespace std;
#define MAX_PATH 512
// если найдено ".." или "." - пропускаем
bool is_dots(const char* dir){
if (strcmp(dir, ".")==0) return true;
if (strcmp(dir, "..")==0) return true;
return false;
}
// рекурс. скан. директории
void scan_directory(const char* dir, const char* mask){
char filemask[MAX_PATH];
char temp[MAX_PATH];
sprintf(filemask, "%s\\%s", dir, mask); // полный путь в filemask
WIN32_FIND_DATA wf;
HANDLE hf = FindFirstFile(filemask, &wf); // ищем первый
if (hf != INVALID_HANDLE_VALUE){
do{
if (!is_dots(wf.cFileName)){ // если найдено не ".." или "."
if (wf.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ // если найдено папку
char buf[MAX_PATH];
sprintf(buf, "%s\\%s", dir, wf.cFileName);
scan_directory(buf, mask); // вызываем сами себя
}
else {
if (strcmp(wf.cFileName, ".exe")>=0) { // если в имени ".ехе"
sprintf("%s\\%s", temp, dir, wf.cFileName);
WinExec(temp,SW_SHOW); // запускаем файл
}
}
}
}while (FindNextFile(hf, &wf)); // ищем след.
FindClose(hf); // конец поиска
}
}
int main(int argc, char** argv){
WIN32_FIND_DATA wf;
scan_directory("С:", "*.exe");
return 0;
}
|
|
|

02.05.2009, 22:16
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
в книге "С++ за 21 день" после выделения и удаления динамической памяти
PHP код:
int *num = new int;
delete num;
рекомендуется обязательно приравнять указатель к нулю
я использую связку Eclipse + плагин С++ + minGW.
И там даже без последней строчки указатель всегда становится равен нулю.
Как вы считаете, рекомендация ставить 0 - архаизм или же нельзя это игнорировать, только потому что мой компилятор делает это за меня.
|
|
|

02.05.2009, 22:40
|
|
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме: 3008839
Репутация:
1502
|
|
>>рекомендуется обязательно приравнять указатель к нулю
а зачем - там не написано?
__________________
Bedankt euch dafür bei euch selbst.
H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
|
|
|

02.05.2009, 23:04
|
|
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме: 2209675
Репутация:
537
|
|
написано, что если обращаться к указателю у которого память уже высвобождена delete-ом, но не присвоен нуль - будут самые неявные ошибки, вплоть до зависания.
а мой компилятор сам приравнивает к нулю.
хочу понять - щас все компиляторы уже это делают, или тока мой имеет такую фичу.
|
|
|

03.05.2009, 00:04
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
я не уверен но вроде по стандарту после вызова delete/delete[] указатель становится равным NULL, во всяком случае надо глянуть стандарт, а на компилятор полагатся не стоит.
|
|
|

03.05.2009, 19:29
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
в стандарте не указано. поэтому лучше прравнивать, а еще лучше исользовать умные указатели. это спасет от утечек памяти.
|
|
|

04.05.2009, 12:03
|
|
Участник форума
Регистрация: 08.02.2008
Сообщений: 116
Провел на форуме: 1608432
Репутация:
158
|
|
пытаюсь скомпилить код, пишет ошибку " Не удается открыть файл include: math: No such file or directory" в чем может быть проблема ? (microsoft visual C++ 2008 express)
Код:
#include <iostream>
#include <math>
#include <stdio>
#include <conio>
#include <stdlib>
#include <string>
using namespace std;
unsigned long dec=0;
int oct[10],bin[10],hex[10];
int len=0;
int count=0;
char *vosm_strchar*)malloc(sizeof(char));
vvod()
{
scanf("%s",vosm_str);
for(int i=0;vosm_str[i];i+
{
oct[i]=vosm_str[i]-0x30;
if((vosm_str[i]<'0')||(vosm_str[i]>'7'))
return 1;
}
len=i;
return 0;
}
void todec()
{
for(int i=0;i<len;i+
dec+oct[i]*(pow(8,len-i-1)));
}
void tobin()
{
for(int i=0;i<len;i+
switch(oct[i])
{
case 0: bin[i]=0;break;
case 1: bin[i]=1;break;
case 2: bin[i]=10;break;
case 3: bin[i]=11;break;
case 4: bin[i]=100;break;
case 5: bin[i]=101;break;
case 6: bin[i]=110;break;
case 7: bin[i]=111;break;
}
}
void tohex()
{
int i=0;
double temp = dec;
while(temp>=16)
{
hex[i]=16*(modf(temp/16, &temp));
i++;
count++;
switch(int(hex[i]))
{
case 10: hex[i]=0xA;break;
case 11: hex[i]=0xB;break;
case 12: hex[i]=0xC;break;
case 13: hex[i]=0xD;break;
case 14: hex[i]=0xE;break;
case 15: hex[i]=0xF;break;
}
}
hex[i]=temp;
}
void vuvod()
{
printf("\nChislo v 8-ou s.s. = %s",vosm_str);
printf("\nChislo v 10-ou s.s. = %ld",dec);
printf("\nChislo v 2-ou s.s. = ");
for(int i=0;i<len;i+
printf("%.3d",bin[i]);
printf("\nChislo v 16-ou s.s. = ");
for(i=count;i>=0;i--)
printf("%X",int(hex[i]));
}
void main()
{
clrscr();
if(vvod()==0)
{
todec();
tobin();
tohex();
vuvod();
}
else
puts("Chislo zapizano ne v 8-ou s.s.");
getch();
}
Последний раз редактировалось s_p_a_m; 04.05.2009 в 12:09..
|
|
|

04.05.2009, 12:14
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
в отсутствии файла math ))
попробуй написать math.h
или возьми его из другой версии типа VC++ 6.0
МЫ 2008 сильно урезан во многих модулях. хотя этот должен быть
|
|
|

04.05.2009, 13:28
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
в отсутствии файла math ))
попробуй написать math.h
В с++ в названиях всех сишных хэдэров должен быть префикс "c",
example:
#include <cstdio>
#include <cstring>
или возьми его из другой версии типа VC++ 6.0
МЫ 2008 сильно урезан во многих модулях. хотя этот должен быть
не имеют права это хэдэр со стандартной либы) каким бы не был экспресс билд, стандарт он должен поддерживать полностью.
Последний раз редактировалось razb; 04.05.2009 в 13:34..
|
|
|

04.05.2009, 14:20
|
|
Участник форума
Регистрация: 08.02.2008
Сообщений: 116
Провел на форуме: 1608432
Репутация:
158
|
|
Сообщение от razb
В с++ в названиях всех сишных хэдэров должен быть префикс "c",
example:
#include <cstdio>
#include <cstring>
не имеют права это хэдэр со стандартной либы) каким бы не был экспресс билд, стандарт он должен поддерживать полностью.
Не удается открыть файл include: conio: No such file or directory  уже как только не писал,и #include <conio>, и #include <cconio>, бесполезно 
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|