Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 0
Регистрация: 10.07.2019
Сообщений: 10

Странности при вызове функции

10.07.2019, 09:55. Показов 2191. Ответов 23
Метки xor (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! На днях решил написать простой код который побитово шифрует текст.

Вот собственно функция которая и шифрует биты.
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
void XOR(char* buff, int buffSize)
{
    const char* key = "qwerty";
    char mask = 0;
    char _tmp = 0;
 
    /* Generating key from char massive */
    for (size_t i = 0; i < strlen(key); i++)
    {
        mask += key[i];
    }
 
    printf("key=%c\n", mask);
 
    for (int i = 0; i < buffSize; ++i)
    {
        /* Skip invalid symbols */
        if (!buff[i])
            continue;
        if (!(buff[i] ^ mask))
            continue;
 
        buff[i] ^= mask;
    }
}
Но вопрос в том, почему при вызове функции из main() запускается сначала цикл xor шифрования, а только потом printf("key=%c\n", mask)?

Я уже менял методы вызова функций на __cdecl __stdcall... Но они только изменяют место хранения аргументов на регистры или стек.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2019, 09:55
Ответы с готовыми решениями:

Класс - Ошибки при вызове методов: В вызове функции отсутствует список аргументов
Добрый вечер всем! При изучении и написании работы столкнулся с ошибкой от которой не могу избавиться. (Т.к. очень сильно плаваю в ООП)....

Ошибка при вызове функции
Ошибка в строке 90, при пошаговом выполнении она появляется при вызове функции, до захода в нее, хотя список сформирован правильно, т.к. до...

Ошибка при вызове функции
Добрый день! Есть функция по расчету детерминанта int _det(int size,double **arr,double &amp;det) { int i,j,k; det=1; double b; ...

23
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
10.07.2019, 11:01
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Ballmer Peak Посмотреть сообщение
если в цикл добавить логи, то они выполнятся раньше чем printf().
А логи ты пишешь не в printf()? ))
Давай финальный код в студию, со всем логами, так, что бы запустить можно было.
0
Модератор
Эксперт С++
 Аватар для zss
13782 / 10975 / 6491
Регистрация: 18.12.2011
Сообщений: 29,263
10.07.2019, 11:03
Что-то я не пойму - из-за чего сыр-бор!
Вы забыли, что вывод буферизованный!
И ОС сама решает, когда сбрасывать буфер (если это не указано).
Так что, если хотите сбросить буфер, то надо писать
C++
1
cout<<"key="<< mask<<flush;
1
Just Do It!
 Аватар для XLAT
4215 / 2675 / 656
Регистрация: 23.09.2014
Сообщений: 9,102
Записей в блоге: 3
10.07.2019, 11:04
Ballmer Peak,
попробуйте так:
C++
13
14
printf("key=%c\n", mask);
fflush(stdout); ///<<<---очистить поток
1
1 / 1 / 0
Регистрация: 10.07.2019
Сообщений: 10
10.07.2019, 11:13  [ТС]
Проблема была в скорости чтения файла (в цикле чтения файла посимвольно), а не в самом цикле с xor'ом на который я думал. Спасибо за помощь! Вот код.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
#include <stdio.h>
#include <time.h>
 
void XOR(char* buff, int buffSize);
int getFileSize(const char* filePath);
 
int main(int argc, char* argv[])
{
    char* in = new char[32];
    char* out = new char[32];
 
    printf("input ");
    scanf("%s", in);
    printf("output ");
    scanf("%s", out);
 
    std::ifstream input(in, std::fstream::binary);
    std::ofstream output(out, std::fstream::binary);
 
    int fileSize = getFileSize(in);
    if (fileSize < 0)
    {
        printf("invalid file size");
        return 0;
    }
 
 
    char* buffer = new char[fileSize];
 
    clock_t t1 = clock();
    for (int i = 0; i < fileSize; i++)
    {
        buffer[i] = input.get();
        int seek = i + 1;
        input.seekg(seek);
    }
    input.close();
 
    clock_t t2 = clock() - t1;
    printf("read file time = %ims\n", t2);
 
 
    XOR(buffer, fileSize);
 
 
    output.write(buffer, fileSize);
    output.close();
 
    system("pause");
    return 1;
}
 
 
void XOR(char* buff, int buffSize)
{
    const char* key = "л";
    char mask = 0;
    char _tmp = 0;
 
    for (size_t i = 0; i < strlen(key); i++)
        mask += key[i];
    
    printf("key=%c\n", mask);
 
    for (int i = 0; i < buffSize; i++)
    {
        /* Skip invalid symbols */
        if (!buff[i])
            continue;
        if (!(buff[i] ^ mask))
            continue;
 
        buff[i] ^= mask;
    }
}
 
int getFileSize(const char* filePath)
{
    std::ifstream f(filePath, std::fstream::ate);
    int size = f.tellg();
    f.close();
    return size;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.07.2019, 11:13
Помогаю со студенческими работами здесь

Ошибка при вызове функции
В функции NewWords вызывается функция correct,при отладке я не могу войти в эту функцию,к тому же потом не выводится элементы объекта...

Проблема при вызове функции
Написал для себя простенькую напоминалку, выводящую указанное сообщение через определённый промежуток времени(ну там, &quot;отойди от...

Ошибка при вызове деструктора (при вызове delete в деструкторе)
Не могу найти ошибку, при вызове деструктора от класса, который был создан при помощи конструктора с параметром const String &amp;,...

GCC ошибка при вызове функции
Здравствуйте. Проблема в следующем: при вызове функции sub из тела add выдается ошибка. http://puu.sh/3bFZj.png Путем экспериментов...

Identifier not found при вызове функции
Здравствуйте. В моем консольном приложении помимо функции int _tmain, есть функция std::vector&lt;std::string&gt;...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Новые блоги и статьи
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru