• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 🚨 29 мая стартует курс «Пентест Active Directory: от теории к практике» от Академии Кодебай

    🔍 Изучите реальные техники атак на инфраструктуру Active Directory: от первоначального доступа до полной компрометации.
    🛠️ Освойте инструменты, такие как BloodHound, Mimikatz, CrackMapExec и другие.
    🧪 Пройдите практические лабораторные работы, имитирующие реальные сценарии атак.
    🧠 Получите знания, которые помогут вам стать востребованным специалистом в области информационной безопасности.

    После старта курса запись открыта еще 10 дней Подробнее о курсе ...

  • Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

Помогите Новичку

  • Автор темы Автор темы Guest
  • Дата начала Дата начала
G

Guest

Здравствуйте уважаемые знатоки)
В наличии имеется простая программа, но я к сожалению не совсем понимаю что она делает (думаю она преобразовывает набор чисел в код). Если кому не трудно, опишите мне все строки как можно подробней. Но можно и просто неизвестные мне команды, их я подчеркну.
Программа из немецкой школы.

#include <stdio.h>
main() {
int i;
int n=0;
char cfeld[41];
printf("Bitte Zeichenkette eingeben: ");
gets(cfeld);
for (i=0;cfeld!=0;i++)
{
n=n^cfeld;
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
system("pause");
}

Более простые решения приветствуются)
 
Программа считает что-то типа контрольной суммы строки, путем операции "исключающее или" - оно же "Сложение по модулю 2" или "XOR" (операция "^" в С++).

n = 0;
для каждого символа строки: n = n ^ следующий символ

можно немного упростить написав: n ^= следующий символ - идентично предыдущей записи
 
gets(cfeld);
for (i=0;cfeld!=0;i++)
{
n=n^cfeld;
}
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
1. Читает строку
2. Цикл for. Так как строка "сишная", то он идёт до тех пор, пока не будет достигнут нуль-символ строки (конец строки по сути)
3. Сложение по модулю 2 с очередным символом строки
4. Вывод строки на экран
 
Возник вопрос, почему вылазит ошибка на строке system("pause")?

Поэтому привожу комментарии и упрощение в коде с использованием функции getch();


C++:
//Подключение библиотеки, содержащей функции работы со строками printf(), gets()
#include <stdio.h>
//Подключение библиотеки, содержащей функцию getch() - обычно используеться для
//того, чтобы считать введенный символ, но будет использоваться для того, чтобы
//задержать инфу на экране
#include <conio.h>
main()
{
//Знадание начального значения контрольной суммы
int n=0;
//обьявление переменной в виде строки из 41 символа
char cfeld[41];
// Выводит "Пожалуйста, введите строку:"
printf("Bitte Zeichenkette eingeben: ");
//Записывает введенную строку в переменную cfeld
gets(cfeld);
//Цыкл, раборающий пока не будет достигнут конец строки
for (int i=0;cfeld[i]!=0;i++)
{
//Выполнение операции "сложение по модулю 2" текущего
//значения контрольной суммы и текущего элемента строки
n^=cfeld[i];
}
//Выводит на экран "У строки _____ контрольная сумма _____"
printf("\nDie Zeichenkette hat %s den Kontrollcode %i\n",cfeld,n);
//Задерживает информацию на экрае до первого нажатия кнопки
getch();
}
 
Не помогает
Пишет E2268 Call to undefined function 'system'
Может это быть из-за того, что компилирую в Embarcadero RAD Studio XE?
Используй Borland C++ 3.1, всё работает.

<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Результат</div></div><div class="sp-body"><div class="sp-content">
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!

Курс AD