20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
1

Происходит непонятное с переменными в структуре

23.12.2015, 21:02. Показов 502. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В переменные из структуры записываются данные. С ними нужно работать в заг. файле, но при выводе заметил, что какие-либо данные в ней отсутствуют. НО если вывести их содержимое в функции, где в нее все записывается. то там есть данные. Уже 4 час мозг ломаю, почему данные пропадают... Помогите, пожалуйста.
Программа под билдер, но приложу функции, где это происходит.

Структура:
C++
1
2
3
4
5
6
7
8
9
10
struct variable
{
    string bytes; // Перемнная для содержания сигнатуры
    string signature;
    string data;
    AnsiString pathToFile;
    int p;// Перемнная для содержания сигнатуры после конвертации в 16 вид
};
 
variable Var;
Функция, где в переменные структуры записываются некоторые данные(в комментариях подписано, где переменные получают конечный результат):
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
bool scan(char* pathToFile) {
    ostringstream oss; // Поток для записи из файла в переменную.
    ifstream base("Base.bas"); // Поток чтения из файла
    ifstream suspectFile(pathToFile, ifstream::binary);
    // Потое открытия проверяемого файла
 
    bool flag = false; // Флаг, определяющий наличие вируса. 1 - есть, 0 - нет.
    //char choise; // Выбор
 
    oss << suspectFile.rdbuf();
    // Записываем в поточную переемнную текст из файла, открытого в двоичном режиме
    Var.data = oss.str(); // содержимое файла записываем в data
 
    suspectFile.close(); // закрываем файл
 
 
 
    while (getline(base, Var.bytes)) // Пока идет запись текста из базы в переменную
    {
        for (int i = 0; i < Var.bytes.size(); i += 2)
            Var.signature += static_cast<char>(strtol(Var.bytes.substr(i, 2).c_str(), NULL, 16)); // Записываем в переменную сигнатуру
        if ((Var.p = Var.data.find(Var.signature)) != string::npos)//В P и в signature записаны конечные данные
            // ищем нужную последовательность в последовательности файла
        {
            Var.data.erase(Var.p, Var.signature.size());//В Data записаны конечные данные
            flag = true; //Флаг - 1. Вирус обнаружен
            break; // Останавливаем цикл
        }
        else
        {
            Var.bytes = "";
            Var.signature = "";
        }
    }
 
    if(flag==true){
        return true;
    }
 
    else
    {
        return false;
    }
}
И функция, где требуются эти переменные(в комментариях подписано, где переменные стали пустыми):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool Treat(char* pathToFile)
{
    ofstream review(pathToFile, ios_base::binary, ios_base::trunc);
    review << Var.data;//тут data ничего не содержит, что очень странно
    review.close();
 
    if(scan(pathToFile) == false)
    {
        return false;//Вируса нет
    }
 
    else return true;//Вирус есть
 
}
З.Ы. Повторюсь, работаю в компиляторе под билдер
З.Ы.Ы. В теме под билдер спрашивал, но решил спросить и тут, т.к. считаю, что проблема не совсем в билдере.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2015, 21:02
Ответы с готовыми решениями:

Происходит непонятное умножение на 2
Посмотрите Тест, ввожу одно, а считает другое. Ввожу 4,5,6 , а умножает 4*5*2. #include...

СМА LG WD-10160NUP, Непонятное происходит!
Доброе время суток.В ремонт поступила сма с неисправностю аммартизационной системы произвили замену...

СМ Indesit WIL105EXTE 46359200075, происходит непонятное
Здравствуйте! Помогите пожалуйста с решением проблемы со стиралкой Индезит. Какая ситуация:...

Что-то непонятное происходит с питанием старенького ноутбука
Здравствуйте!Помогите что-то непонятное происходит с питанием старенького ноутбука,в общем в данный...

3
88 / 83 / 21
Регистрация: 08.08.2012
Сообщений: 737
23.12.2015, 21:12 2
Не по теме, просто в глаза бросилось
вместо
C++
1
return flag;
ты пишешь это
C++
1
2
3
4
5
6
7
8
if(flag==true){
    return true;
}
 
else
{
    return false;
}
1
76 / 76 / 32
Регистрация: 14.04.2014
Сообщений: 408
23.12.2015, 21:36 3

Не по теме:

Цитата Сообщение от Хулиган Посмотреть сообщение
ты пишешь это
в лучших традиция кодеров из Индии))



По теме: открой дебагер и пошагово проконтролируй, что у тебя со структурой происходит, и где очищается дата.
А вообще, если уж пишешь на С, пиши на С, если на С++, то на С++. Инкапсуляция, наследование, полиморфизм. У тебя тут 1 не используется, и 2 нарушены, не удивительно, что не работает...
1
20 / 20 / 11
Регистрация: 12.07.2015
Сообщений: 350
24.12.2015, 15:28  [ТС] 4
Здесь можно сделать класс с переменными в private и функциями в public и от этого плясать. Правильно мыслю?
0
24.12.2015, 15:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2015, 15:28
Помогаю со студенческими работами здесь

При изменении размера массива происходит непонятное
int size = 1000; //собственно здесь и кроется проблема, если size &lt; 100, то все ок ...

Объясните принцип действия foreach: что происходит с переменными
Интересует такой вопрос - когда мы пишем что то наподобее foreach(var a in results), можем ли мы...

Что происходит с внешними переменными, если объект, создающий новый поток, удалит сборщик мусора
Здравствуйте! Недавно поймал себя на одной мысли. Что происходит с внешними переменными, если...

Как происходит происходит простейший вывод сообщения в консоль в MASM
Простите за нубство. Начал читать книгу Калашникова и там в первейшей программе такой код: CSEG...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru