• Как безопасно подменить OpenVPN сервер?

    @res2001
    Dmitriy Loginov, Нет никаких родных ключей. Могут быть какие-то "демонстрационные", но их не нужно использовать.
    Не могут подключиться, потому что у "родных" ключей и у ваших разные ключи центра сертификации (ca.key, ca.crt). Именно эти ключи объединяют все другие ключи между собой. И правильность ключей клиента и сервера проверяется с помощью ключей CA.
    Именно поэтому к вашему серверу не может подключиться кто угодно просто сгенерировав у себя любые ключи - у него нет ваших ключей CA. Для генерации новых ключей, требуется приватный ключ CA (ca.key) и его надо держать в секрете, если не хотите, что бы вас сломали в один прекрасный день.
    Сам по себе ключ ca.key используется только при генерации других сертификатов. Этот ключ не нужен на работающем OpenVPN сервере и клиентах. В остальных случаях используется его публичный сертификат ca.crt, который как раз можно распространять на право и на лево.

    Вам надо что-то почитать про инфраструктуру открытых ключей (PKI) и X.509.
  • Почему не правильно выводит значения d?

    @res2001
    fewgesto,
    Код должен посчитать сколько введен каждый символ в строке, строку сам задаешь

    Во первых, есть же функция strlen, например, и пачка других строковых функций. Почему их не используете?
    Во вторых странный подход к решению задачи. Зачем сортировка?
    Просто используйте массив счетчиков из 256 элементов. Инициализируйте массив нулями. Для индексации в массиве используйте код символа. Задача решается за один проход по строке, никаких сортировок.
    Схематично без ввода строки:
    unsigned count[256];
    memset(count, 0, sizeof(count));
    // Считаем количество символов
    for(int i=0; a[i] != '\0'; ++i) {
      ++count[a[i]];
    }
    // вывод
    for(int i=0; i < 256; ++i) {
      if(count[i] > 0)
        printf(" %c=%d\n ", (char)i, count[i]);
    }
  • Как с помощью for добиться такого же результата, что и командой dir?

    @res2001
    wisgest, Ага, получилось. Поторопился, мой косяк.
    Ну что ж, отлично!
    Похоже майки в вин10 хорошо поработали над cmd. Было бы интересно этот же опыт провести на Вин7/8.
  • Как с помощью for добиться такого же результата, что и командой dir?

    @res2001
    wisgest, А теперь выполни все это из батника. У меня ошибка во второй команде.
  • Как с помощью for добиться такого же результата, что и командой dir?

    @res2001
    wisgest,
    Похоже, что служебные символы в переменных цикла (в отличие от таковых в аргументах командных файлов и переменных окружения) экранирования и не требуют

    Не согласен. Как только любая переменная, которая содержит не стандартные символы будет подставлена в любую команду - будут проблемы. А она в любом случае будет подставлена, иначе в ней нет смысла.
    Путь, содержащий не стандартные символы, может попасть в переменную цикла, т.к. этот путь явно нигде не присутствует в команде и попадает в переменную через внутренний механизм cmd и каналов. Тогда как параметры батника и/или процедур должны быть явно переданы при вызове и в этом случае сразу получаем проблемы.
    Я как-то делал один проект на батниках :) и там пытался бороться с этими символами. В итоге появился промежуточный скрипт на JScript, который анализировал обрабатываемые файлы и переименовывал их, и второй скрипт, который делал обратную операцию после обработки батником.
  • Как вывести только русские символы?

    @res2001
    adaskl, Хотите сказать, что входная последовательность будет в UTF16?
    Значит изучайте, как в UTF16 происходит кодирование и где находятся русские символы.
    Кстати, порядок байт в UTF16 может быть двух вариантов LE и BE :-) Какой у вас?
  • Как вывести только русские символы?

    @res2001
    Adamos, Да я видел. Но в тексте задачи это не прозвучало, так что, возможно, автор эти вызовы вставил "по привычке".
  • Как вывести только русские символы?

    @res2001
    Может надо открывать cp866 или UTF8?
    Хорошо бы уточнить в условии задачи этот момент, входных кодировок может быть несколько.
    Можно взять одну наугад, но есть вероятность не угадать и программа не пройдет тест.
    Можно делать универсальную версию, но это, конечно, сложней.
  • Во время запуска Windows или при установки новой Windows появляется ошибка 0x0000428 и 0xc0000428?

    @res2001
    HiddenCode, Делайте тест памяти.
    Если комп не опломбирован производителем и если в материнке несколько плашек памяти, то можете оставить одну и протестировать каждую плашку отдельно. Так можно выяснить какая битая и поменять только ее.
    Если опломбирован, то не стоит лезть внутрь, т.к. можете слететь с гарантии, а она, похоже, вам сейчас понадобится.
  • Во время запуска Windows или при установки новой Windows появляется ошибка 0x0000428 и 0xc0000428?

    @res2001
    Т.е. комп не работает ни в каком виде?
    Видимо битая память.
    Нужно сделать загрузочную флэшку с тестом памяти и протестировать. Тест памяти есть практически во всех диагностических наборах, например в adminpe.
  • Нужно продублировать каждое третье слово в введённой строке С++. Как можно исправить мой текущий код?

    @res2001
    Mokybrow, Как-то у вас все усложнено.
    Честно говоря мне лень разбираться в вашем коде.
    Дам совет - запустите программу под отладчиком и пройдите ее по шагам, контролируя все операции. Думаю это должно вас навести на мысли где в коде ошибка.

    Почему не пользуетесь методами класса wstring? Ваш код можно сделать гораздо проще с их помощью.
    Если уж вы используете wstring, то все строковые и символьные константы должны быть с префиксом L.
    Заячем вот это делать: L"" + a Может надо просто инициализировать a пустой строкой в начале? ...
  • Как с помощью for добиться такого же результата, что и командой dir?

    @res2001
    wisgest, Из-за не стандартных символов в любом варианте могут возникнуть проблемы.
    Что, разве обычный for (или for /r или for /d) выдает имена файлов и пути с экранированными не стандартными символами? По моему, нет, хотя я не проверял. Так что проблема с нестандартными символами всплывет в любом варианте обработки таких файлов/путей в батнике.
    Решить проблему, наверное, можно, исключив из вывода dir с помощью дополнительной фильтрации все подозрительные файлы. Но, я бы не назвал это решением. Так же можно переименовывать подобные файлы/каталоги так что бы они не содержали не стандартных символов, но это надо делать не средствами cmd.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Там не обязательно не может быть this, важно, что там не может быть какого-то другого значения, отличного от того, что он прочитал при прошлом обращении к этой же памяти.
    И это он будет думать не из-за const, а из-за restrict.
    const в данном случае делает сам this константным, а не память под ним.
  • Нужно продублировать каждое третье слово в введённой строке С++. Как можно исправить мой текущий код?

    @res2001
    В чем заключается ошибка?
    Приведи пример входных данных, выходных и что должно было бы получится при нормальной работе программы.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Учитывая, что restrict в стандарте нет, то какой конкретно тип будет у this в этом случае сильно зависит от компилятора.
    const в данном примере не принципиально и никак не влияет на тему нашего обсуждения.
    Константный указатель вполне может указывать на не константный объект.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Все может быть, но в оптимизациях всегда надо тестировать до и после, иначе не понять работает ли твоя оптимизация. Так что все подобные рассуждения теоретические.
    Restrict это совсем не то что константный указатель.
    Кстати, this, является rvalue, поэтому this = something нигде и не встретишь.

    Попробуйте объявить someSelfAliasableMember из вашего последнего примера с restrictом.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Если это для вас критично, то restrict может немного добавить скорости.

    Но опять, же повторюсь, обычно нет необходимости опускаться до "оптимизации инструкций", гораздо большего эффекта можно добится оптимизируя алгоритм или структуры или архитектуру всего приложения. Даже просто оптимизиация выделений памяти может дать гораздо более существенный прирост.
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322,
    а если у меня, например,

    Когда это происходит в пределах одной функции, то компилятор справится с этими зависимостями и оптимизирует там где можно и не оптимизирует там где нельзя.
    Но компилятор не может гарантировать, что параметры функции не ссылаются на одну область памяти, поэтому генерирует код без оптимизаций. Указывая restrict вы гарантируете компилятору от себя, что пересечений по памяти не будет и компиялтор начинает резвится как может.
    я этим просто обещаю компилятору, что именно сам this не буду менять

    restrict относится к памяти на которую ссылается указатель, а не к самому указателю.
    Так что в моем сообщении выше "закэшировать this в регистре" - не правильно. Компилятор может кешировать значение this->buffer из вашего примера, в этом случае убирается лишняя команда чтения buffer, о которой вы писали - будет использована ранее сохраненная в регистре информация.

    Тёмная материя :)
  • Член класса/структуры типа uint8_t * или int8_t *, оптимизация?

    @res2001
    floppa322, Это говорит компилятору, что других указателей, ссылающихся на ту же область памяти, что и this в функции нет. Поэтому он может уверенно закэшировать this в регистре и не перечитывать его каждый раз.