Задать вопрос
  • Чем отличаются size_type, size_t, unsigned X?

    @res2001
    Developer, ex-admin
    size_type - это обычно typedef из других типов, который разработчик контейнера решил использовать в контейнере. Скорее всего это будет тот же size_t. Для данного конкретного контейнера логично использовать его size_type.
    Размер size_t привязан к размеру указателя, т.е. sizeof(void*) == sizeof(size_t).
    Как раз это и обеспечивает, то что size_t может индексировать всю возможную память (по байту) для конкретной архитектуры процессора. Размер size_t на х32 - 4 байта, на х64 - 8 байт. Размер указателя, в свою очередь, равен размеру адресной шины процессора.
    В общем случае для счетчиков элементов и т.п. вещей всегда используйте size_t. Но если вы точно знаете, что у вас вот в этом конкретном контейнере/массиве не может быть больше n-ого количества элементов (например массив фиксированного размера), то можно использовать тип меньшей разрядности, достаточный для индексации контейнера.
    Переменные счетчиков, индексов и т.п. обычно делаются беззнаковыми (size_t - беззнаковый), потому что обычно алгоритмически эти переменные никогда не принимают отрицательных значений. Так зачем терять лишний значащий разряд? Но это не всегда так, в каждом конкретном случае нужно делать свой выбор, универсальных решений нет.
    Бывает ли на практике размер контейнера таких размеров которые вмещаются в size_t? В базах данных запросто может быть таблица размером больше, чем помещается в 4 байтовый size_t. Максимальное значение 8 байтового size_t - это ооочень большое число. В практических задачах вряд ли найдется контейнер, вмещающий такое количество объектов (но всегда могут быть исключения). Но итерироваться или считать можно не только объекты в контейнере, можно считать например байты/сектора на диске или пакеты в интернете или контейнер может лежать в распределенной системе хранения размером в экзабайты или больше (сейчас это уже реально).
    Ответ написан
    2 комментария
  • Как посчитать количество символов в char на С?

    @res2001
    Developer, ex-admin
    Конкретно для приведенного примера можно делать так: (sizeof(text) - 1)
    Это будет работать только в подобных случаях, когда text - это статический/автоматический массив фиксированного размера (как в данном примере). -1 требуется, чтоб удалить завершающий нулевой символ.
    Преимущество перед strlen в том, что sizeof вычисляется на этапе компиляции, т.е. по факту в коде вместо этого выражения будет константа 14, вычисленная компилятором.
    Кстати, можно делать еще так: sizeof("Literal string") - 1

    Если text будет определена по другому, например char *text = "Literal string";, то такой подход уже не прокатит.
    Универсальный вариант, который будет работать для всех случаев однобайтной строки с завершающим нулем - использовать strlen.
    Ответ написан
    Комментировать
  • Как повторно отправить нужный мне tcp пакет?

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

    @res2001
    Developer, ex-admin
    Текущий каталог вы не удалите, т.к. он занят вашим же процессом cmd.exe. Надо перейти в другой каталог, а затем уже удалять.
    Ответ написан
    Комментировать
  • В чем разница const char* и char const*?

    @res2001
    Developer, ex-admin
    Между const char * и char const * - разницы нет. Допустимо использовать обе записи.
    Но кроме самих данных, на которые указывает указатель, можно делать константным и сам указатель, как написал Adamos.
    Ответ написан
  • Совет в написании своей ОС?

    @res2001
    Developer, ex-admin
    Начинайте портировать приложения с открытым исходным кодом под свою ОС. Начните с bash. Там вылезут какие-то требования к ядру, которые вы не поддержали изначально и, возможно, вы решите их реализовать в ядре.
    Стоит посмотреть интерфейс POSIX для понимания того, какой интерфейс должно предоставлять ядро в userspace.
    Можно придумать свой крутой интерфейс. Но тогда вам придется портировать все приложения с открытым исходным кодом под свою ОС. С поддержкой POSIX часто можно обойтись просто перекомпиляцией.
    Ответ написан
    Комментировать
  • Какой компилятор выбрать для C++?

    @res2001
    Developer, ex-admin
    На винде микросовтовский компилятор, по ощущениям, лучше. Специально замеры не проводил, все субъективно. Причем не обязательно использовать студию, можете сидеть на том же CLion (или QtCreator) и собирать с помощью cl. Можно поставить вообще только MS Build Tools - туда как раз и входит компилятор без IDE. На счет лицензирования - вопрос интересный. Предоставляют компилятор бесплатно, но могут быть лицензионные ограничения на разработку коммерческого софта.

    На линукс gcc или clang.

    Разница между компиляторами, конечно, есть. Разные расширения, разная степень поддержки стандартов, особенно свежих. Могут отличаться возможности оптимизации и т.п. Например микрософт никогда не поддерживала стандарты Си и там много чего нет еще с С99. Стандарты С++ они официально поддерживают.
    Если вы пишите приложение используя только стандартизованные языковые возможности (без расширений компилятора), то, по идее, не должно быть проблем пересесть на другой компилятор в рамках одной ОС.
    Кстати в gcc по умолчанию расширения включены.

    Есть и другие компиляторы. Например у интел хороший оптимизирующий компилятор, но он стоит денег.
    Ответ написан
  • Как корректно отслеживать завершение потоков?

    @res2001
    Developer, ex-admin
    Предлагаемый POSIX вариант это join. Если не устраивает, то вы сами можете конструировать проверку завершения потоков теми средствами какие вам удобно и какие доступны.

    Самое простое: выставляйте в потоке атомарный флаг завершения, в основном потоке проверяйте.
    Если можно подождать какое-то время, то можно использовать условную переменную с таймером, а не флаг.
    Можно и очередь, но, по моему, это как из пушки по воробьям. Для этой задачи не совсем то. С тем же успехом можно использовать pipe. Но зачем, когда это можно сделать проще.

    Имейте ввиду, что join все равно надо вызвать, когда удостоверитесь, что поток завершен. Чтоб окончательно освободить все ресурсы потока. Или надо заранее делать поток отсоединенным (detach). Я бы использовал join, а не detach.
    Ответ написан
  • Почему считывается с файла только 1 слово, а не весь текст?

    @res2001
    Developer, ex-admin
    Не раскрыта тема о классе House. Не видя его трудно что-то сказать.

    Но могу предположить, что в House, например, поле address является std::stringом.
    А std::string хранит свою строку в динамической памяти и sizeof(std::string) в общем случае совсем не равен размеру хранящейся в нем строки. Записывая в файл sizeof(std::string) байт вы записываете грубо говоря только адрес памяти где лежит строка и размер строки, но не саму строку.
    Вам нужно делать нормальную сериализацию/десериализацию полей объекта House.
    Ответ написан
    4 комментария
  • Объединение белого и серого ip?

    @res2001
    Developer, ex-admin
    Если обобщить задачу, то это сводится к поддержке нескольких интернет каналов одновременно.
    Остальные ваши хотелки (да и вообще любые другие) настраиваются используя фаервол и принудительно отправляя пакеты подходящие под определенные правила на тот или другой интерфейс.
    Такое применяют, например, для балансировки нагрузки (примерно ваш случай), обеспечении отказоустойчивости или оба вместе.
    Проще всего купить роутер, который поддерживает одновременно 2 канала. Не знаю, есть ли такие в природе. Встречал только те, у которых есть резервный канал. Но это не то. В этом случае резервный канал не активен, пока работает основной и включается только при сбое основного канала.

    Лет 10 или больше назад собирал подобную схему для балансировки нагрузки используя шлюз на базе FreeBSD, тамошний фаервол ipfw и множественные таблицы маршрутизации.
    В линукс есть network namespaces, в серверной винде VRF - это все технологии позволяющие использовать множественные таблицы маршрутизации в этих ОС. С помощью этих инструментов, скорее всего, можно собрать аналогичный шлюз. Но это не точно. Могу поручится только за то, что на FreeBSD это возможно.
    Ответ написан
  • Как в операторе for задействовать определенные числа?

    @res2001
    Developer, ex-admin
    for(int i = 1; i < 11; i+=2)
    Ответ написан
    Комментировать
  • Доступ к компьютеру через RDP вне локальной сети?

    @res2001
    Developer, ex-admin
    Как тут уже советовали универсальное решение - настроить ВПН и внутри ВПН использовать любые локальные ресурсы, которые необходимы, в т.ч. и по RDP.

    При прямых руках можно и RDP выпустить наружу без дополнительных прослоек в виде ВПН. Но это надо делать на серверной винде с поднятой службой RDS, на десктопе скорее всего полностью обезопасить RDP подключение не выйдет.
    Вот тут статья о защите RDP. Она хоть и старая уже, но принципы те же.
    Еще несколько полезных статей:
    https://winitpro.ru/index.php/2022/02/17/ustanovka...
    https://winitpro.ru/index.php/2019/12/17/rdp-tls-s...
    https://winitpro.ru/index.php/2022/03/17/nastrojka...
    Ответ написан
    Комментировать
  • Как создание таймера на удаление файла в общей папке?

    @res2001
    Developer, ex-admin
    В шедулер на ежедневный запуск ночью батник или скрипт на poshе, который будет удалять файлы старше 14 дней по дате модификации.
    По posh не подскажу, а батник написать достаточно просто.
    Команда forfiles может сделать все, что тебе нужно. Смотри справку: forfiles /?
    Ответ написан
  • Не запускается ПК. Как найти причину?

    @res2001
    Developer, ex-admin
    Стандартный подход в таких случаях: оставить минимум подключенного железа, одну плашку памяти, так что бы хотя бы тест БИОС проходил и что-то на экран показывалось, сделать диагностическую флешку и начать тестирование. Начинайте с памяти, дальше нагрузочный тест проца, потом все остальное. Подключать железо по одному и тестировать вновь подключенное.

    Если в любой конфигурации комп не подает признаков жизни, то возможные причины:
    1. неисправна память, можно попробовать найти заведомо рабочую память
    2. материнка
    3. проц
    4. БП вы, похоже, уже исключили.

    На самом деле, вы уже успели испробовать все варианты с оборудованием и видимо это не принесло результатов. Пора нести комп в сервис.
    Ответ написан
    2 комментария
  • Как соединить 2 ЛВС через vps?

    @res2001
    Developer, ex-admin
    На VPS настраиваете ВПН сервер.
    ВПН клиенты можно настроить на роутерах на имеющихся или на новых. Можно на компах внутри сетей.
    Настраиваете маршрутизацию и фаерволы.
    Пользуетесь.
    Ответ написан
    Комментировать
  • Почему при умножении 1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17 получается совсем что-то не то?

    @res2001
    Developer, ex-admin
    Ответ в комментариях
    Ответ написан
    Комментировать