Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.80/41: Рейтинг темы: голосов - 41, средняя оценка - 4.80
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
1

что то вроде программки,которая проверяет Hosts и лечит

29.10.2009, 19:14. Просмотров 7506. Ответов 99
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void main (){
 
int c=0;
FILE *f=fopen("C:\WINDOWS\system32\drivers\etc\hosts", "a");
 
while((c=getc(f))!=EOF){
 
    if(c!="127.0.0.1 localhost"){
        cout<<"File hosts is infected";
f = fopen("C:\WINDOWS\system32\drivers\etc\hosts", "w");
fputs("127.0.0.1 localhost", f);
    }
}
 
fclose(f);
 
}
это мой код,вот на этом месте
if(c!="127.0.0.1 localhost")
я на этом месте не знаю как поступить
надо написать код,ктороый если находит другие строки кроме заводских строк-должен удалять их...как сделать?

Добавлено через 4 минуты
вопрос некорректно задал
в файле есть некий текст,определить,если кроме этого текста есть и другие слова,то удалить весь текст и добавить
127.0.0.1 loaclhost
это мой алгоритмн
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2009, 19:14
Ответы с готовыми решениями:

Напишите функцию, которая проверяет, отсортирован ли массив
Напишите функцию, которая проверяет, отсортирован ли массив вещественных чисел...

Составить программу, которая проверяет число на четность
Суть самой программы: нужно составить программу, проверяющую, что введенное...

Написать программу, которая проверяет удачливость билета
Близняшки Вера,Надежда и любовь пользуются общественным транспортом,чтобы...

Написать программу, которая проверяет, является ли год високосным
Написать программу, которая проверяет, является ли год високосным. Помогите...

Написать функцию которая проверяет на уникальность каждый номер
Решите пожалуйста Добавлено через 4 минуты Написать функцию которая...

99
TanT
эволюционирую потихоньку
467 / 465 / 91
Регистрация: 30.06.2009
Сообщений: 1,399
29.10.2009, 19:20 2
Цитата Сообщение от МедведЪ Посмотреть сообщение
[CPP
Добавлено через 4 минуты
вопрос некорректно задал
в файле есть некий текст,определить,если кроме этого текста есть и другие слова,то удалить весь текст и добавить
127.0.0.1 loaclhost
это мой алгоритмн
ты знаешь какой текст есть в файле? если да, то сравнивай посимвольно с исходным и корректируй как хочешь, если встретишь не соответсвие. но что-то мне подсказывает, что первичное наполнение файла не известно.
0
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
29.10.2009, 19:26  [ТС] 3
этот файл-hosts а что там находится все прогеры знают

Цитата Сообщение от TanT Посмотреть сообщение
сравнивай посимвольно с исходным
как?
0
#pragma
Временно недоступен
955 / 226 / 14
Регистрация: 12.04.2009
Сообщений: 926
29.10.2009, 19:32 4
C
1
int c=0;
У тебя переменная int, заведи переменную char* или что-то в этом духе.И читай построчно.Найди где-нибудь creference и погляди,какие нужные функции для этого есть.
А вообще начинание хорошее.Типа против заразы
0
TanT
эволюционирую потихоньку
467 / 465 / 91
Регистрация: 30.06.2009
Сообщений: 1,399
29.10.2009, 19:35 5
Цитата Сообщение от МедведЪ Посмотреть сообщение
этот файл-hosts а что там находится все прогеры знают

как?
я ж не прогер, я не знаю, честно.
а как? #pragma, ответил
0
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
29.10.2009, 20:03  [ТС] 6
Цитата Сообщение от #pragma Посмотреть сообщение
creference
Что это такое?
Цитата Сообщение от #pragma Посмотреть сообщение
И читай построчно
нувот как?
C++
1
while(c!=EOF)
???

Добавлено через 1 минуту
Цитата Сообщение от #pragma Посмотреть сообщение
А вообще начинание хорошее.Типа против заразы
АГА
0
#pragma
Временно недоступен
955 / 226 / 14
Регистрация: 12.04.2009
Сообщений: 926
29.10.2009, 21:57 7
"С reference" - обзор библиотеки Сhttp://www.google.ru/search?hl=ru&so...%B2+Google&lr=
Функция чтения построчно http://www.cplusplus.com/reference/clibrary/cstdio/fgets/
1
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
29.10.2009, 22:01  [ТС] 8
#pragma, там все на англ...я понимаю,ты хочешь что бы я прочел про него,но щас мне код нужен....благодарен тебе за это
0
HIMen
4265 / 1432 / 101
Регистрация: 12.04.2009
Сообщений: 2,346
29.10.2009, 22:03 9
а че его читать-то? пиши туда сразу 127.0.0.1 loaclhost и все
0
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
29.10.2009, 22:07  [ТС] 10
HIMen, в hosts-e не только 127.0.0.1,но и комментарии,если написать только ИП то программа будет счиать что эти комментарии-зараза....там целый текст
0
#pragma
Временно недоступен
955 / 226 / 14
Регистрация: 12.04.2009
Сообщений: 926
29.10.2009, 23:03 11
Комментарии можешь тереть.Толку то от них,ты же английский не понимаешь,так три их в самом начале,и так и оставь файл,чтобы была одна строка.Если добавилось что-то,значит тревога.
0
M128K145
Эксперт JavaЭксперт С++
8327 / 3548 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
29.10.2009, 23:20 12
МедведЪ, поставь '\\', вместо '\'
1
#pragma
Временно недоступен
955 / 226 / 14
Регистрация: 12.04.2009
Сообщений: 926
30.10.2009, 04:00 13
Вот попробуй.Сделай резервную копию файла где нибудь,и путь укажи в программе там где написано.Только помни,что нужны двойные слеши в пути.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <stdlib.h>
 
#define MAX_STRING_SIZE 255
 
int main()
{
   FILE *file;
   FILE *etalon;
 
   char *str_in_file = (char *)malloc(MAX_STRING_SIZE);
   char *str_in_etalon = (char *)malloc(MAX_STRING_SIZE);
 
   if ((file = fopen("C:\\WINDOWS\\system32\\drivers\\etc\\hosts", "a+")) == NULL)
   {
      printf("File \"hosts\" doesn't exist!");
      exit(EXIT_FAILURE);
   }
   if ((etalon = fopen("Тут твой путь к файлу-эталону", "r")) ==  NULL)
   {
      printf("Etalon file doesn't exist!");
      exit(EXIT_FAILURE);
   }
 
   while(fgets(str_in_file,MAX_STRING_SIZE,file) != NULL) {
 
     str_in_etalon = fgets(str_in_etalon,MAX_STRING_SIZE,etalon);
 
     if (strcmp(str_in_file,str_in_etalon))
     {
        printf("File hosts is changed,found this string: %s,removing...",str_in_file);
        fputs(str_in_etalon, file);
     }
     else printf("This string looks ok.\n");
   }
 
   free(str_in_file);
   free(str_in_etalon);
 
   fclose(etalon);
   fclose(file);
 
   return 0;
}
Может,и корявенько,но думаю сойдёт Если интересно,разберись сам с хеш-функциями,и просто сравнивай "чек-суммы",думаю это оптимальный вариант.

Добавлено через 10 минут
Ой,я тут маненько ошибся,там если найдена чужеродная строка,нужно начать читать файлы заново,и перезаписать их построчно,а лучше просто заменить файл на эталон,а то нормальная строка может записаться в самый конец файла,а не на своё место.Но ты уже сам доделай,ок ? =)
1
Search..
30.10.2009, 04:22
  #14

Не по теме:


Помню, как только зарегистрировался на этом форуме, заметил очень выделяющегося пользователя - #pragma. Выделялся он тем, что у него было рвение изучить с/с++ настолько огромно, что это не передать словами. Короче говоря, в отличие от многих людей, которые хотели что-то изучить и говорили "ой это же сложно и т.д." - #pragma учил и не на что не жаловался. Вот, прошло около полу года, как #pragma дает действительно полезные советы (в данном случае) пользователю МедведЪ. Очень впечатляют такие люди, т.к. их единицы. Извиняюсь за офтоп. :pardon:

1
inter
9707 / 2462 / 48
Регистрация: 06.03.2009
Сообщений: 8,503
30.10.2009, 04:24 15
Search.., в данном случае соглашусь, прагме +
0
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
30.10.2009, 09:55  [ТС] 16
Цитата Сообщение от #pragma Посмотреть сообщение
free(str_in_file);
free(str_in_etalon);
Цитата Сообщение от #pragma Посмотреть сообщение
(char *)malloc
в эти штучки мне не знакмоыПрокомментируй
0
inter
9707 / 2462 / 48
Регистрация: 06.03.2009
Сообщений: 8,503
30.10.2009, 09:59 17
ну по аналогии то хотя бы? стринг понятно?
стринг в файле, стринг в эталоне(в образце)?
ну а чар и маллок в хелпе описаны?
0
#pragma
Временно недоступен
955 / 226 / 14
Регистрация: 12.04.2009
Сообщений: 926
30.10.2009, 11:20 18
Цитата Сообщение от МедведЪ Посмотреть сообщение
в эти штучки мне не знакмоыПрокомментируй
C
1
2
   char *str_in_file = (char *)malloc(MAX_STRING_SIZE);
   char *str_in_etalon = (char *)malloc(MAX_STRING_SIZE);
Здесь мы выделяем память под строку размером MAX_STRING_SIZE с помощью функции malloc.Функция возвращает указатель на область памяти,ей выделенную,сама функция имеет тип void* ,поэтому мы её насильно приводим к типу char*.
C
1
2
   free(str_in_file);
   free(str_in_etalon);
А тут память освобождается.Сейчас пригляделся,оказывается malloc может возвращать NULL при неудаче,я этого не знал.Лучше мне,наверное,ничего не советовать,а то насоветую всякую чушь.
В-общем,нужно и для malloc делать проверки на NULL.
0
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
30.10.2009, 14:28  [ТС] 19
#pragma, большое спасибо
0
AnonymC
1179 / 464 / 86
Регистрация: 23.06.2009
Сообщений: 6,375
Завершенные тесты: 1
30.10.2009, 20:27  [ТС] 20
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main()
{
   FILE * pFile;
   char mystring [100];
 
   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     fgets (mystring , 100 , pFile);
     puts (mystring);
     fclose (pFile);
   }
   return 0;
}
я этот код не понял,mystring Это типа сожеражние фалйа да,ну типа сравнивает?
я этот момент не понял
fgets (mystring , 100 , pFile);

Добавлено через 33 минуты
вот переделал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void main (){
 
FILE * f;
int c=0;
   char mystring [1000]; 
   f = fopen ("D:\\ALEX RESERF\\ALEX\\111.txt" , "r");
 
   if (f == NULL) perror ("Cant open file");
   else {
 
       while((c=getc(f))!=EOF){
 
     fgets (mystring , 1000 , f);
     puts (mystring);
     }
 
   }
 
fclose (f);
 
system("pause");
 
}
теперь выводит весь текст выводит...но все таки я не понял до конца...как сдела если прога увидит лишние строки то сообщать об этом и удалить их?какая функция?

Добавлено через 9 минут
вот мой новый
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <windows.h>
#include <string.h>
#include <string>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream> 
using namespace std;
 
void main (){
 
FILE * f;
int c=0;
   char mystring [1000]; 
   f = fopen ("D:\\ALEX RESERF\\ALEX\\111.txt" , "r");
 
   if (f == NULL) perror ("Cant open file");
   else {
 
       while((c=getc(f))!=EOF){
 
     fgets (mystring , 200 , f);
     puts (mystring);
     }
 
   }
   cout<<"\nMy\n"<<mystring;
 
fclose (f);
 
system("pause");
 
}
код
вот в этом месте cout<<"\nMy\n"<<mystring; выводит только последнюю строку,как сделать что последние 2?3?
0
30.10.2009, 20:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2009, 20:27

Написать функцию которая проверяет кратность двух чисел
Написать функцию, которая принимает два целых числа N и M, и возвращает...

Написать программу которая по заданному n проверяет число на палиндром
Привет! Поступил учиться на дистанционное высшее образование, получил по...

Нужна программа которая проверяет, является ли число простым
Нужна программа которая проверяет, является ли число простым. Вводится одно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru