Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Описать структуру STUDENT http://www.cyberforum.ru/cpp-beginners/thread59888.html
Помогите с программой плз Не работает почему-то //Описать структуру с именем SUDENT, содержащую в себе следующие поля: //Фамилия и Инициалы //Номер Группы //Успеваемость(массив из 5 элементов) // ИНДИВИДУАЛКА ПО ТЕМЕ СТРУКТУРЫ.cpp : main project file. #include <iostream.h> #include <string.h>
C++ Средняя длина слова. Извините что еще раз обращаюсь,помогите пожалуйста. Нужно найти среднюю длину слова в строке,и обрабатывать строку как массив,не используя функций strlen и strtok. помогите пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread59883.html
C++ Найти ошибку в коде (матрицы и действия на ними).
пишу курсовую (связано с матрицами) впринципе матрицы рассчитаны правильно. а вот с матричным уравнением есть проблема в конце нужно проверить права чатина = левой а они никак несходяться перебрал код уже раз 10 не могу понять в чем проблема. #include <vcl> #include <iostream> // для потокового введення-виведення #include <iomanip> #include <math> #include <conio> // для консольного...
C++ Cтроки и массив.
1)Массивы: а) Даны числа n и m. Создайте массив int A и заполните его следующей змейкой (ниже приведен пример для n=4 и m=6): 0 1 2 3 4 5 11 10 9 8 7 6 12 13 14 15 16 17 23 22 21 20 19 18 Выведите массив на экран, отводя на вывод каждого числа ровно 3 символа. б)Дан массив, состоящий из символов. Определить, симметричен ли он, т.е. читается ли он одинаково слева направо и справа налево ...
C++ Принадлежит ли точка четырехугольнику. http://www.cyberforum.ru/cpp-beginners/thread59869.html
Надеюсь на помощь форумчан: Задача следующяя: задана коодинатами точек четырёхугольная фигура A(-2,-1) B(-1,1) C(0,0) D(1,0) С клавиатуры вводятся координаты ещё одной точки. Нужно определить принадлежит ли точка данной фиуре. Метод, которым я воспользовался: Разбиваем нашу фигуру на два треугольника: 1-ABC 2-ACD вычисляем их площади. у нас дана точка с координатами берём первый...
C++ Функции. Поиск минимума и максимума. Составить программу для нахождения суммы минимального и максимального значений среди элементов каждой из линейных таблиц Х и Y подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
04.11.2009, 23:27     что то вроде программки,которая проверяет Hosts и лечит
Да какие проблемы! Не за что!
А насчет этого
C++
1
(char)ch
Это называется явное преобразование типа.
Дело вот в чем:
C++
1
(char)ch != str[n]
Смотри... ch у нас является переменной типа int. А str[n] имеет тип char. Это совершенно разные типы.
Если бы мы написали так:
C++
1
ch != str[n]
получилось бы что мы сравнивали char с int, т.е. помидоры с яблоками.
Нам надо привести переменную ch к типу char или str[n] к типу int, чтобы мы могли их сравнить. Для этого нам надо использовать конструкцию вида
C++
1
(type)varible
, где variable (ch) - переменная некоего типа, которую необходимо привести к другому типу, type(char) - тип к которому необходимо привести переменную variable.
Это, как раз мы и сделали: привели переменную ch типа int к типу char.
Вот такая арифметика.
На самом деле про преобразования типов (да и просто про типы), лучше почитать в литературе, потому что с этой темой связано много различных вопросов.
Явное преобразование типа, неявное преобразование типа, потеря информации при приведении - вот далеко не полный перечень вопросов, связанных с данной темой.

У меня, кстати, есть предложение развивать далее эту программу в целях обучения(поработать с Win32API функциями, сделать проверку с эталонным файлом, резервное копирование файла host, прикрутить к ней меню и т.д. и т.п.). Но в ближайшие недели две, к сожалению, у меня не будет возможности тебе в этом помочь.

Добавлено через 6 минут
Код
# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999
#
# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.
#
# Этот файл содержит сопоставления IP-адресов именам узлов.
# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен
# находиться в первом столбце, за ним должно следовать соответствующее имя.
# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.
#
# Кроме [B][U]3[/U][/B]того, в некоторых строках могут быть вставлены комментарии 
# (такие, как эта строка), они должны следовать за именем узла и отделяться
# от него символом '#'.
#
# Например:
#
#      102.54.94.97     rhino.acme.com          # исходный сервер
#       38.25.63.10     x.acme.com              # узел клиента x

127.0.0.1       localhost
Жирным и подчеркивание выделено изменение которое я сделал.
Результат работы программы:
Код
Hosts инфицирован
Для продолжения нажмите любую клавишу . . .
Проверь все тщательно.

Добавлено через 10 минут
И еще небольшое изменение:
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
#include <locale>
#include <stdio.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
 
  char str[] = "# (C) Корпорация Майкрософт (Microsoft Corp.), 1993-1999\n#\n# Это образец файла HOSTS, используемый Microsoft TCP/IP для Windows.\n#\n# Этот файл содержит сопоставления IP-адресов именам узлов.\n# Каждый элемент должен располагаться в отдельной строке. IP-адрес должен\n# находиться в первом столбце, за ним должно следовать соответствующее имя.\n# IP-адрес и имя узла должны разделяться хотя бы одним пробелом.\n#\n# Кроме того, в некоторых строках могут быть вставлены комментарии \n# (такие, как эта строка), они должны следовать за именем узла и отделяться\n# от него символом '#'.\n#\n# Например:\n#\n#      102.54.94.97     rhino.acme.com          # исходный сервер\n#       38.25.63.10     x.acme.com              # узел клиента x\n\n127.0.0.1       localhost";
  FILE* hosts = fopen("C:\\Windows\\System32\\drivers\\etc\\hosts" , "r");
 
  if(!hosts){
    printf("Не удалось открыть файл hosts");
    system("pause");
    return 0;
  }
 
  int ch;
  int strlenght = strlen(str);
  int n = 0;
 
  while((ch = getc(hosts)) != EOF){
    if(n >= strlenght || (char)ch != str[n] ){
      printf("Hosts инфицирован\n");
      
      // здесь перезаписываем файл
 
      system("pause");
      fclose(hosts);
      return 0;
    }
 
    ++n;
  }
 
  printf("Hosts не инфицирован\n");
 
  fclose(hosts);
  
  system("pause");
  return 0;
}
Добавлено через 7 минут
Изменения касаются ситуации, когда в файле количество символов больше, чем количество символов в нашей строке.
Предположим в файле 5 символов ("abcde"), а в строке str 3("abc").
Когда мы считаем 4-ый символ из файла ('d'), n будет равно 3, а str[n] = '\0', т.е. мы уже вышли за пределы строки str. А это уже свидетельствует о том, что файл инфицирован, т.к. в файле символов больше, чем в строке!
 
Текущее время: 19:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru