• Как изменить атрибуты в объекте C++ через ввод?

    @res2001
    Developer, ex-admin
    Ошибка, очевидно, тут: cin >> mark;
    У вас mark - это указатель (а не строка). При этом указатель никуда не указывает (не инициализирован). Следовательно память под чтение не выделена. Куда по вашему должна попадать прочитанная информация?
    Напомню, что указатель это целое беззнаковое число (размером в 4 или 8 байт в зависимости от платформы, могут быть и другие варианты, но это больше экзотика), которое интерпертируется как адрес в памяти. Если в указателе мусор (как сейчас), то запись по этому указателю вызовет SEGFAULT при выполнении программы, вам повезло - компилятор сам заметил эту ошибку, с SEGFAULTом разбираться обычно труднее.

    Но и это еще не все.
    В следующей строке вы создаете временный объект Car с помощью вызова конструктора, после выхода из Input этот объект сразу уничтожается.

    Вам нужно:
    1. выделить память под marka. Лучше всего использовать не char*, а std::string, тогда память будет выделяться автоматически.
    2. читать ввод не в mark, а в marka. То же самое и для других двух переменных класса.
    Ответ написан
    1 комментарий
  • Как ускорить работу скрипта?

    @res2001
    Developer, ex-admin
    Один из файлов (меньший) сразу читайте весь (блоками, об этом ниже) и каждую строку помещайте в std::unordered_set<std::string>.
    Второй файл - построчно проверяете находится ли строка в set.

    Читать файлы лучше не строками, а большими блоками (4Кб или больше). Наибольшее время занимают именно операции чтения файла. Читая файл большими блоками вы сокращаете количество операций чтения. Дальше работаете с блоком - вручную делите его на строки и т.д. Не забываете, что блок не обязан заканчиваться и начинаться ровно в конце или начале строки.

    Если еще более оптимизировать, то std::unordered_set<std::string> лучше заменить на std::unordered_set<const char*> или std::unordered_set<std::string_view>.
    Смысл в том, что std::string под каждую строку будет выделять динамическую память - выделение памяти само по себе медленная операции (конечно быстрее, чем чтение файла, но тем не менее), а тут вы сначала прочитаете кусок файла в большой блок который будет выделен в динамической памяти, а затем под каждую строку из этого блока будете еще раз выделять память. Поэтому лучше при чтении большими блоками первого файла выделять блок динамически и сразу прям внутри блока делить его на строки (т.е. добавлять символ '\0' в конце каждой строки) и указатель на начало каждой строки добавлять в set (или делать из него std::string_view и уже его добавлять в set).
    Естественно выделенные блоки первого файла вам придется учитывать вручную (например хранить указатели на блоки в векторе) и после освобождения setа освобождать каждый блок (а не каждую строку).
    Для второго файла будет достаточно одного блока.
    Ответ написан
    Комментировать
  • Как подключить к wireguard более 255 клиентов?

    @res2001
    Developer, ex-admin
    Маска не обязана быть кратной 8. Она может быть любым числом от 0 (все IP адреса, такую маску наверное нельзя назначить), до 32 (1 адрес). Уменьшая маску на 1, вы увеличиваете емкость адресного пространства в 2 раза.
    Например для сети 10.0.0.0/23 адресное пространство будет 10.0.0.0 - 10.0.1.255 и это адресное пространство будет в одной подсети.
    Ответ написан
    3 комментария
  • Есть ли способ организовать двойное подключение к хосту: напрямую через интернет и через впн?

    @res2001
    Developer, ex-admin
    Следует отказаться от FTP. Используйте, например, протокол SCP - защищенное подключение по ssh, GUI клиенты.

    Но и VPN можно допилить. Скорее всего у вас сейчас при подключении к ВПН весь трафик направляется в ВПН (ВПН сервер становится шлюзом по умолчанию), от этого и проблемы. Это можно исправить настройками ВПН. Но этого будет не достаточно, вам нужно поднять NAT на ВПН сервере на внешнем интерфейсе для не ВПН трафика, который затем должен быть направлен в ВПН (и наоборот). Как правило NAT на ВПН сервере не обязателен, но это не ваш случай.
    Ответ написан
    Комментировать
  • Указываются ли комментарии в листинге кода?

    @res2001
    Developer, ex-admin
    В исходники смотрят люди, которые могут понять код. Соответственно комментарии в коде пишутся для них, т.е. для программистов. А раз человек может прочитать код, то проще всего написать код так, что бы он был достаточно прост для понимания читающего. Тут включаются стандартные правила об именовании переменных, стилю написания кода, KISS и т.д. и т.п.
    В реальности комментарии необходимы только для не тривиальных, трудных для понимания частей кода, где используется какой-то хитрый алгоритм или не очевидный хак.
    Если вы будете использовать систему авто-генерации документации, то тут уже придется писать комментарии к каждой сущности в коде по правилам этой системы и программист заодно становится и тех.писателем.
    Ответ написан
    Комментировать
  • Как маршрутизировать траффик через промежуточный локальный интерфейс?

    @res2001
    Developer, ex-admin
    Вам нужно на роутере добавить маршрут до сети 192.168.5.0/24 через IP eth0.
    На самом компе добавлять маршрут не нужно, т.к. он имеет IP адреса во всех задействованных сетях, то маршруты уже есть.
    Пингами с роутера проверяете доступность IP eth1.
    Т.к. eth2 работает мимо ОС, то схема должна работать.
    Естественно на компе надо включить маршрутизацию пакетов и настроить/выключить фаервол.
    Сниффером слушаете eth1.

    Более "чистая" и точно рабочая схема была бы, если использовать второй ПК: eth2<=>второй ПК<=>router
    На втором ПК можно настраивать сниффер и видеть весь трафик.
    Ответ написан
    1 комментарий
  • Какой ВПН установить на сервер, без установки конфигураций?

    @res2001
    Developer, ex-admin
    Все ВПН клиенты требуют той или иной конфигурации. Т.к. вы работаете с линуксом, то конфигурация находится в файлах. Была бы винда, был бы еще вариант конфигурации в реестре. Но в любом случае конфигурация будет.
    Приведенная вами команда генерирует конфиг сама, а то и не один, не проверял. Ссылки на дополнительные скрипты, указанные в вашем скрипте сейчас не доступны. И это не РКН их блочит. Ссылки ведут на github, но github изменил стиль ссылок на raw файлы. В скрипте используются старые ссылки, которые сейчас не работают. Можете поправить ссылки вручную в скрипте при желании.
    Этот скрипт мало того, что конфигурирует ВПН, он еще и устанавливает необходимые пакеты. Т.е. нормально так вмешивается в систему.
    Родной github репозиторий вашего скрипта тут: https://github.com/hwdsl2/setup-ipsec-vpn
    Там же лежат и другие скрипты, которые выкачиваются первым скриптом.
    Ответ написан
    Комментировать
  • Как оценивается идентификатор функции без оператора вызова?

    @res2001
    Developer, ex-admin
    Как указатель на функцию.
    При повышенном уровне сообщений компилятора скорее всего будет какое-то предупреждение. С точки зрения языка ошибки нет, но фактически действие бесполезное, поэтому и предупреждение.
    Ответ написан
  • Как создать изолированную учетную запись в Windows 10?

    @res2001
    Developer, ex-admin
    "Нормальные" современные программы сохраняют свои документы, настройки или временные файлы в профиль пользователя, из-под которого они были запущены, в каталоги типа Documents, %Temp%, %AppData% и ветки реестра в разделе HKCU.
    Это не влияет на подобные сохранения других пользователей этой программы на этом компьютере.
    Конечно могут быть и исключения. Например, некоторые настройки каких-то программ могут быть сделаны только на уровне системы, в таких случаях подобная настройка повлияет на всех пользователей. Или криво написанная программа может сохранять свои настройки и временные файлы куда-то в каталог/раздел реестра, который будет общим для всех пользователей.

    Новый пользователь всегда создается с чистым профилем (точнее с профилем "по умолчанию", который то же можно менять), но ему доступны все программы установленные ранее администратором (см.ответ Hemul GM ).
    Если не хотите, что бы пользователи влияли друг на друга, используйте для сохранения программ каталоги профиля пользователя и отберите администраторские права у всех пользователей, кроме одного.
    Ответ написан
    Комментировать
  • Как создать ссылку от имени другого пользователя в Linux?

    @res2001
    Developer, ex-admin
    В скрипте после создания ссылки измените ее владельца с помощью chown.
    Ответ написан
    4 комментария
  • Предопределено ли присвоение типу данных значения, не помещающегося в этот тип данных?

    @res2001
    Developer, ex-admin
    В стандарте С11 п.6.5.4 пишут, что лишние байты будут отброшены ("removes any extra range and precision").
    Какой результат будет, если типы знаковые и значение а отрицательное и не влазит в диапазон целевого типа не уточняется.
    В плюсовом стандарте я что-то ничего не нашел на эту тему, но по факту поведение аналогично Си.
    Ответ написан
    Комментировать
  • Задание создания динамического массива до первого отрицательного числа, как это сделать?

    @res2001
    Developer, ex-admin
    Лучше использовать std::vector. Просто вводите числа в промежуточную переменную. После ввода каждого числа проверяете отрицательно ли оно, если нет, то добавляете число в вектор. Если число отрицательное и вектор не нулевого размера, то сортируете вектор с помощью std::sort и выводите вектор на экран. Все.

    Вместо вектора можно использовать и "сырые" Си массивы в динамической памяти. Алгоритм тот же, но при добавлении каждого нового числа вам нужно выделить новый массив большего размера, скопировать содержимое старого в новый, старый удалить. Для перевыделения массива можно использовать realloc(), она выполняет все эти операции. Вектор скрывает эти операции от вас и делает все то же самое, но без вашего участия, так же в векторе есть оптимизация, позволяющая делать меньше перевыделений памяти.
    Ответ написан
    Комментировать
  • Как получить вывод команды с терминала в переменную?

    @res2001
    Developer, ex-admin
    Через файл - это самый простой вариант.
    Более технологичный вариант - запускать процесс с перенаправлением потоков stdin/stdout/stderr в каналы (pipe).
    В этом случае можно в режиме "on-line" получать вывод от запущенного приложения и генерировать вход для приложения. Этот сложнее, но дает гораздо больше гибкости в работе с запускаемым процессом.
    Ответ написан
    Комментировать
  • Как добавить Lua дополнения в игру?

    @res2001
    Developer, ex-admin
    Кроме Lua добавляют и Python и другие интерпретируемые языки.
    Это называется "встраивание Lua" в свое приложение (embeded Lua, embeded Python, ...). Гуглите в этом направлении.
    В официальной документации по питону, есть отдельный раздел на эту тему. Видимо, то же и в Lua должно быть.
    Ответ написан
    6 комментариев
  • Как запустить сеанс от другого пользователя в окне на том же самом компьютере в Windows 7 Prо?

    @res2001
    Developer, ex-admin
    У десктопной винды может быть активен только один сеанс, это лицензионное ограничение. Хотите много сеансов - нужен Windows Server.
    Ограничение можно обойти с помощью RDPWrapper. Он позволяет подключаться по RDP, не отключая консольный сеанс. Но это нарушение лицензии.
    Хотя кому в наше время интересны ограничения какой-то иностранной компании из недружественной страны :)
    Ответ написан
    1 комментарий
  • Как данные перемещаются в сети интернет, всегда конвертируются в кадры Ethernet или остаются в пакетах IP?

    @res2001
    Developer, ex-admin
    Если смотреть только на Ethernet, то он представляет плоскую сеть, где все узлы равноправны и могут обмениваться трафиком друг с другом на прямую без всякой маршрутизации. Ethernet ничего не знает о других сетях. Для него есть только одна сеть.
    Поэтому для взаимодействия между разными сетями нужен более высокоуровневый протокол, который позволяет отличить адреса "своей" сети, от "чужих" адресов (обеспечивает маршрутизацию между сетями). Это IP. Датаграммы IP вкладываются в поле данных Ethernet.
    Над IP есть TCP и UDP. TCP гарантирует доставку пакетов, UDP - не гарантирует. Общее между ними то, что оба протокола позволяют идентифицировать конечные приложения на хосте получателя и отправителя по номерам портов. Сам по себе IP не позволяет этого делать, для него конечной точкой является хост в сети, средств идентификации приложений внутри хоста в IP нет. TCP и UDP пакеты вкладываются в поле данных IP пакета.
    Ну и далее поверх TCP и UDP куча прикладных протоколов, которые решают какие-то специфические задачи. Эти прикладные протоколы точно так же вкладываются в поле данных протоколов TCP или UDP.

    И нет никакой конвертации и преобразования, просто пакет вышележащего протокола является данными для пакета нижележащего протокола (инкапсуляция). Про инкапсуляцию смотри аналогию CityCat4 о картошке.
    Ответ написан
  • Можно мне книг по шаблонному программированию в С++?

    @res2001
    Developer, ex-admin
    Для теории есть книга "Шаблоны С++".
    Так же можно посмотреть исходники STL там шаблоны очень активно применяются. А так же и другие свободные библиотеки, например boost.
    Ответ написан
    1 комментарий
  • Как читать вывод git diff?

    @res2001
    Developer, ex-admin
    Файл был переименован. index, видимо, показывает коммит где файл появился первоначально с правами на файл 0644 (стандартные права файловых систем Unix). 10 - "обычный файл".
    Утилита stat выводит такую же инфу о правах, но в шестнадцатиричном виде, а тут восьмеричный.
    Вместо 10 может быть еще 12 - ссылка, и возможно еще какие-то варианты.

    Три минуса и три плюса - стандартное для diff обозначение для сравниваемых файлов. Типа первый файл это ---, второй файл +++.
    Цифры в @@ отрицательная - это "строка, колонка" для первого файла, положительная - для второго. Указывают место где файлы различаются.
    Ответ написан
    Комментировать
  • Почему MinGW не видит winapi функцию?

    @res2001
    Developer, ex-admin
    С чего вы это взяли что компилятор не видит функцию?
    Если бы это было так, то ошибка была бы что-типа "undefined refference" или "implicit declaration".
    У вас похоже ошибка где-то выше по коду, а в этом месте компилятор просто понял, что тут ошибка.
    Ответ написан
  • Как получить текущий путь в BAT файле?

    @res2001
    Developer, ex-admin
    Именно так и узнавать текущий путь: %CD%
    Это не важно где лежит батник, т.к. исполняется не сам батник, а cmd.exe. Т.е. когда вы 2ПКМите на батнике, лежащем на раб.столе запускается команда: cmd.exe /c c:\users\user\Desktop\file.bat
    При этом путь где лежит батник никакого отношения к текущему пути не имеет. cmd.exe обычно запускается с текущим каталогом %SystemRoot%\System32.
    Чтоб перейти в каталог, где лежит батник, используйте команду: cd /d "%~dp0"
    Пути можно получать из параметров батника, указанным способом, то же самое можно делать для переменных цикла, и параметров процедур. Список доступных модификаторов (буквы после %~ доступны в описании команд call и for.
    Ответ написан
    1 комментарий