Ответы пользователя по тегу C++
  • Почему разный результат байт?

    @rPman
    У тебя разные типы данных и соответственно размеры int это 4 байта (или 8 в зависимости от компилятора и архитектуры) и char - 1 байт
    int in_stream[100]
    и
    char packet_data[100];

    memcpy работает с байтами а значит копирует только часть данных
    Ответ написан
  • Есть ли что то вроде api, который позволял бы компилировать программу из под исполняемого файла?

    @rPman
    почему нет, все есть, та же libcxx

    так же для работы с исходниками существуют библиотеки, позволяющие проанализировать код и работать с его структурой, например для поиска и рефакторинга (на их основе делают ide)
    Ответ написан
    Комментировать
  • Как организовать статическую реализацию интерфейса?

    @rPman
    Использование виритуальных методов идеологически подразумевают наличие экземпляра объекта, тип которого по исходникам не известен и используется базовый тип предка, но прописан в таблице виртуальных методов (ссылка на которую будет таскать каждый экземпляр объекта). Да, было бы классно иметь доступ к этой таблице методов синтаксически но такова селяви.

    Поэтому в с++ нельзя быть одновременно virtual и static (а у тебя тебя еще веселее, предок не статичный а потомка ты пытаешься сделать статичным)

    Обходят это созданием промежуточных методов и даже класса, где методы не статичные но для них создается фиктивный пустой объект (для него можно написать отдельную пустую инициализацию) в котором собраны все виртуальные методы. Сам этот объект в классе уже определен static.

    Лично я считаю это достаточно неудобным чтобы вообще оставить static в принципе, лучше без него тогда
    Ответ написан
  • Что делать, если не открывается приложения Windows Form?

    @rPman
    я тут вижу два разных языка - c++ и manged c (на нем написано приложение win form)

    выбор языка определяется в момент создания проекта, именно это определяет как это будет запускаться

    если же у тебя два проекта в solution то там же есть настройка, какой запускать

    p.s. чтобы из одного проекта вызывать код другого, этот другой должен быть библиотекой dll (повторяю, отдельный проект в солюшне), там и точка входа называется по другому

    пример доки, как вызывать из managed кода unmanaged (тот что ты на c++ хочешь)
    Ответ написан
    6 комментариев
  • Как взаимодействовать с txt файлом, находящимся на сервере, с помощью с++?

    @rPman
    Вопросов тьма, от ответов на них зависит и результат
    Например - сервер доступен ли по какому то протоколу?
    во всех операционных системах можно настроить какой-нибудь протокол smb/nfs/ftp/http/ssh/... все они позволяют получить доступ к файлу так или иначе.
    Это вопрос не программирования а devops, настроить соответствующее приложение-сервер, на стороне клиента есть очень универсальная библиотека - libcurl (и одноименная утилита) умеет наверное все популярные и не очень протоколы.

    Само собой можно написать свой сервер по своим правилам (гуглить socket server c++) но стоит ли?

    p.s. netcat, консольная утилита, позволяет отправить через пайпы содержимое файла в сетевой сокет а на другой стороне соответственно наоборот принять, способ тупой, простой, на основе его и баш можно сделать однострочник сервер для отправки файла любому подключившемуся.
    Ответ написан
    6 комментариев
  • Как сохранить значения нескольких переменных в С++ 17?

    @rPman
    я так понимаю человек желает аналог php-шного list
    list($normal_weight, $weight)=getInfo();

    в таких языках как C+ (да и C) идеологически парные переменные объединяют в классы (структуры), с которыми = работает как копирование всей структуры.

    struct NormalWeight {int normal_weight, weight};
    // ...
    NormalWeight nm=getInfo();
    if (nm.weight > nm.normal_weight)
    Ответ написан
  • Как скомпилировать консольное приложение для Android?

    @rPman
    Общая идея android приложений - это dalvik bytecode (обычно это java) виртуальная машина, но разрешается использовать нативные библиотеки

    Соответственно пишешь минимальное приложение на java (пусть даже без gui, а вывод при необходимости делать в системные логи), которое первым делом подключит библиотеку, которую так же помещаешь в apk.

    Исторически это называется java native interafce, позволяет навести мосты между java приложением и нативным c/c++.

    дока - https://developer.android.com/studio/projects/add-...
    немного про android jni - https://developer.android.com/training/articles/pe... там же слева смотри ссылки как собирать

    Это очень трудоемкий путь, помимо того что придется пробираться через дебри jni прослойки и ограничений, понадобится поддерживать все многообразие железа (архитектур) причем как 32-битных так и 64-битных, где уже на этапе их сборки и отладки появится миллион проблем, т.е. не только x86 но и arm, причем последний это не пара а много много - arm64-v8a , armeabi , armeabi-v7a ... (больше если надо поддерживать старое железо)
    Ответ написан
    Комментировать
  • Как создать jpg файл в winapi используя картинку из буфера?

    @rPman
    интересно ты совсем не умеешь гуглить или не пробовал даже?
    winapi clipboard image example
    Ответ написан
    Комментировать
  • Отсутсвуют экземпляры перегруженная функция «pow»?

    @rPman
    у pow два параметра, а в указанном месте только один
    компилятор не нашел такой функции с одним параметром и честно об этом сказал
    Ответ написан
    Комментировать
  • Почему не компилируется любой C/C++ код в Visual Studio?

    @rPman
    попробуй переустановить студию (только ее), вполне возможно что вовремя установки компоненты устанавливались вручную не в томи порядке в котором ожидал майкрософт
    https://4systems.ru/inf/e1696-ne-udaetsja-otkryt-i...
    Ответ написан
  • Как писать код С++ на Линукс?

    @rPman
    Настоятельно рекомендую начать изучение c++ с командной строки (буквально hello world писать в текстовом редакторе и собирать, запуская вручную gcc/clang), т.е. тулчейна, затем системы сборки, make, cmake, scons (кстати это питоновские скрипты, описывающие проект) и вот после того как пощупаешь, соберешь чужие проекты, и вот тогда загляни в красивые GUI (idea/qtcreator/eclipse/...)
    Ответ написан
    Комментировать
  • Как будет работать система плагинов, при условии что плагины можно писать на разных языках?

    @rPman
    в комментариях к вопросу все что надо уже сказали.
    Первая проблема - хранение данных (переменные, структуры, объекты), вторая - код.

    1 вариант -. первую проблему предлагали решить стандартом сериализации а вторую - принципиально - пусмть каждый плагин запускается по своему отдельным процессом, и использует какой то способ коммуникаций с основной программой (сеть, IPC и т.п.)

    2 вариант - свести все разнообразие используемых языков программирования к одному (например байткоду), и использовать общий фреймворк, если это позволено, такое есть как для java jvm, так и для .net clr (c#, cpp#, vb#, python#,...) или более современно и предпочтительнее (быстрее, больше возможностей и прочее но и сложнее) - llvm, правда с общим фреймворком будет сложнее.
    В этом варианте код плагинов скорее всего должен будет подгружаться в рантайме используя идеологию dinamic link library, но не обязательно.

    Интересным вариантом может быть линковка во время сборки проекта (не во время выполнения, т.е. потребуется перезапуск, в подавляющем больинстве случаев загрузка плагина на лету не требуется, dll чаще используется как инструмент организации хранения и распространения), отличным примером являются объектные файлы компиляции c/c++ компилятора (на самом деле есть компиляторы и для других языков, даже python с помощью nuitka переводится в c++) и уже на месте с нужной конфигурацией все они собираются линкером в один запускаемый бинарник, и при этом исходные коды не распространяются а процес сборки проходит достаточно быстро (он понадобится при смене конфигурации плагинов или обновлении версии какого либо одного из списка)
    Ответ написан
    4 комментария
  • Как удалить элементы векторов по одинаковому индексу С++?

    @rPman
    может в некоторых крайних случаях работать чуть медленее
    не могу представить ситуацию когда один индекс и список объектов будет медленнее нескольких для каждого поля.
    подскажи в каких
    Ответ написан
  • Какой open source проект написан на труъ Си++?

    @rPman
    можно какой-нибудь ярко выраженный пример кода, на который жалуются коллеги?

    могу предположить
    вместе с c++ обычно идут библиотеки std, даже не так, можно printf а можно cout, можно со строками работать, ковыряясь с байтами самостоятельно, strccpy, while(*buf) и т.п. а можно пользоваться std:string, кучей готовых реализаций (и сильно неэффективного кода но с меньшими шансами на ошибки)
    Ответ написан
    Комментировать
  • Как на Linux читать и изменять память процесса?

    @rPman
    погуглю за тебя
    помимо самого доступа нужно еще и чужие структуры понимать, а это значит использовать как минимум те же версии подключаемых библиотек (в т.ч. статически, что не так просто определить)
    Ответ написан
    Комментировать
  • Проблема с получением времени c++?

    @rPman
    а ты делаешь этот код в цикле с интервалом хотя бы минута?
    совет, равенство делай не строгое, а такое st.wMinute >=21
    и отладка, хотя бы выводи на экран на время поиска проблемы значение st.wMinute
    Ответ написан
    Комментировать
  • Что нужно знать, чтобы написать web server на C++?

    @rPman
    для создания простейшего веб сервера на c++ требуется минимум знаний

    базовые знания devops (умение устанавливать/настраивать необходимый софт разработчика и используемые библиотеки)
    базовые знания языка программирования c++
    базовые знания понимания работы сетей, понятие socket
    базовые знания по тому что такое web server и хотя бы приблизительное понимание http протокола
    базовые знания разработки многопоточных/многопользовательских приложений (даже без знаний про мьютекс/семафор, просто общие положения,так как веб сервер может быть однопоточным но знать/понимать проблему нужно)

    эти знания позволят написать hello world web server
    дальнейшее усложнение задачи потребует больше знаний уже по этой задаче
    Ответ написан
    Комментировать
  • Почему результат вычисления целочисленный?

    @rPman
    pow возвращает тип double
    в первом случае ты его преобразуешь в int и все последующие операции идут с целочисленными типами, в т.ч. и /,
    а в записи в строку он левую часть выражения до / делает типом double и значит деление тоже вызывается для типа double
    Ответ написан
    Комментировать
  • Как лучше оптимизировать такие действия с массивами?

    @rPman
    Какое точное определение неправильного слова и как определить правильное?
    Что сильнее делает слово неправильным, отсутствие буквы? перестановка? подмена? а какое более неправильное? есть ли разница, в какой позиции слова произошла ошибка, в первом символе или остальных?
    Например список слов без ошибок:
    море
    мор
    март

    И вот у нас слова:
    мар - это мор или март?
    маре - это март или море?
    так - это


    Т.е. первое, нужно определить функцию сравнения слова из анализируемого файла со словами из списка правильных.

    Я бы взял уже готовую функцию levenshtein (с разными оценками на типы изменений) и для упрощения например брал бы первое слово из списка с минимальной оценкой ошибки.

    Дальше алгоритм
    * Если решать в лоб, никаких ресурсов не хватит, просто для каждого слова из списка вычисляешь оценку на ошибку с правильным, перебирая их до тех пор пока не встретится с оценкой 0.
    Трудоемкость - квадрат на экспоненту от средней длины слова - т.е. долго
    * Предварительно можно исходные анализируемые данные собрать в map слов, чтобы исключить повторения
    * Можно чуть чуть оптимизировать этот алгоритм, если слов с ошибкой в исходном файле мало, перед сравнением искать слово по словарю, построив map заранее, и искать первую минимальную ошибку сравнения, т.е. для правильных слов использовать максимально быстрый алгоритм поиска, исключив их из медленного алгоритма сравнения
    * Дальнейшая оптимизация - расширение последнего шага - можно заранее создать структуру в памяти для всех возможных значений строк с единичным изменением правильных слов (т.е. для каждого правильного слова поместить в map это измененное слово и ссылку на правильное) - получим массив ошибочных слов с ошибкой 1, т.е. все слова с ошибкой 1 могут быть обнаружены со скоростью работы map, так как количество изменений в данном случае сравнимо с количеством используемых символов (умножить на 3) а в задаче речь о словах, т.е. количество символов мало? то на каждое слово в map будет 3*n записей
    * Точно так же можно сделать массив всех ошибочных слов для 2-ух изменений (например 1-изменение на каждую запись от списка с 1-изменением)
    * 3-ех,..4-ех и т.п.

    Очевидно что хранить в памяти такое количество данных очень дорого (можно не хранить в map сами значения, а только хеши для поиска и разруливание коллизий использования этого хеша), плюс предварительное заполнение таких массивов долгое, и имеет смысл только для небольшой глубины (например известно что основное количество ошибочных слов имеет малое количество ошибок, а слова с большим количеством ошибок бесполезны - в реальной задаче поиска ошибок так и есть, никого не интересует случаи когда в слове все буквы ошибочны, обычно речь идет о 2-3 ошибках)

    * Дальнейшая оптимизация - перевернуть алгоритм на поиск в ширину по графу всех возможных изменений правильных слов (это не дерево а граф, так как правильные слова за конечное количество изменений будут переходить друг в друга или другие ошибочные слова, созданные из других правильных слов), т.е. запускаем поиск и на каждом шаге делаем сравнение полученной строки с ошибкой со всеми словами из анализируемого списка, тут поиск быстрый по map)
    Этот подход имеет смысл если анализируемых слов сильно много (и они все с ошибками) и накладные расходы на сравнение со всеми комбинациями ошибок - не велики, по памяти - она так же потребуется на поддержание самого поиска в ширину
    Ответ написан