Задать вопрос
  • Можно ли создать bat файл который будет откатывать изменения?

    @res2001
    Developer, ex-admin
    При чем тут cmd/bat?
    Делайте бэкапы, и восстанавливайте файлы из бэкапов.
    Обычно чем вы создаете бэкапы, тем же инструментом и восстанавливаете.
    Инструментов для бэкапа/восстановления много. В т.ч. можно накропать соответствующие скрипты и на батниках, используя какой-нибудь архиватор.

    Если вы надеялись на простой чудесный способ восстановления без предварительного бэкапа, то такого варианта не существует.
    Ответ написан
    Комментировать
  • Создание файла txt и запись в него C++?

    @res2001
    Developer, ex-admin
    Смотри сначала сюда: https://en.cppreference.com/w/cpp/io/basic_fstream
    Потом сюда: https://en.cppreference.com/w/cpp/io/basic_filebuf/open
    fstream открывает файл по умолчанию (как у тебя) в режиме in|out, а это значит, что если файла не существует, то возникает ошибка (смотри таблицу по второй ссылке). Логика такая, что если ты открываешь файл для чтения (тут не важно, что он открывается еще и для записи) без дополнительных флагов, то файл должен существовать.

    В пару с ifstream, который открывает файл для чтения, существует и ofstream - он открывает файл для записи. При использовании ofstream не существующий файл будет создан (смотри таблицу по второй ссылке).
    Ответ написан
    Комментировать
  • Как раздельно передать сообщения, которые не помешаются в один пакет?

    @res2001
    Developer, ex-admin
    TCP/IP - это набор протоколов, а не только TCP.
    Конкретно протокол TCP - это потоковый протокол, ориентированный на соединение.
    Потоковый - это значит, что данные для вышестоящего уровня, который использует TCP, прядставляются не в виде отдельных пакетов, а в виде потенциально безразмерного потока байтов.
    Так что по TCP вы без труда можете гонять гигабайты, не заморачиваясь на разбиение их по пакетам - TCP сам все разберет на отдельные пакеты, а на принимающей стороне сам все пакеты сложит в поток.
    При этом сохраняется порядок байт, а если что-то потеряется при передаче, то будет повторено еще раз.

    Протокол, который ориентирован на передачу отдельных сообщений (пакетов) - UDP. Он то же входит в набор протоколов TCP/IP.
    Ответ написан
    Комментировать
  • Высвободится ли память,если использовать метод clear() у vector,который был заполнен структурами?

    @res2001
    Developer, ex-admin
    В С++ структура это практически то же самое что и класс.
    Реализуйте в структуре деструктор, в котором будет освобождаться память под name. При удалении элементов в векторе (clear), для каждого существующего элемента будет вызван деструктор.
    Ответ написан
    Комментировать
  • Как создать задачу в планировщике заданий через консоль?

    @res2001
    Developer, ex-admin
    schtasks /?
    Ответ написан
    Комментировать
  • Как найти в строке слова-палиндромы?

    @res2001
    Developer, ex-admin
    Проблема в том, что word у вас массив двойных указателей (**). Тогда как strtok возвращает обычный указатель.
    Из-за этого тут
    if(word[x] != word[y])
    вы сравниваете 2 указателя, а не 2 символа.

    Вообще я бы убрал массив word в принципе. Вы сразу можете вызывать polyndrome после того как нашли очередное слово.
    Ответ написан
    Комментировать
  • Можно-ли отправить внешний ip адрес на e-mail через bat скрипт?

    @res2001
    Developer, ex-admin
    Можно.
    Только сначала требуется узнать этот внешний адрес, а затем отправить его по почте.
    Обе эти задачи средствами которые есть в cmd по умолчанию не решить.
    Но если использовать не cmd, а WSH (то же есть в винде по умолчанию, JScript/VBS) или posh, то это облегчит задачу и уже можно будет ее решить не прибегая к сторонним инструментам.
    Ответ написан
    Комментировать
  • Почему выходит синтаксическая ошибка в команде?

    @res2001
    Developer, ex-admin
    Напишите команду start сразу после do.
    Или можно завернуть start в круглые скобки. Открывающая круглая скобка должна быть после do в той же строке.
    Т.е. for вместе с телом цикла - это одна команда для cmd и она должна быть на одной строке. Круглые скобки позволяют обойти это ограничение.
    Ответ написан
    2 комментария
  • NETBIOS и WINS на Android без домена?

    @res2001
    Developer, ex-admin
    Не стоит связываться с netbios именами, используйте DNS - это надежно, понятно и управляемо, в отличии от netbios, который "вещь в себе".
    Ответ написан
    Комментировать
  • Как просмотреть список установленного ПО на удаленном хосте (для локального код прикрепляю)?

    @res2001
    Developer, ex-admin
    Утилита reg умеет запрашивать реестр удаленных компов, если есть доступ, конечно: reg /?
    Эту же операцию можно сделать с помощью wmic, она то же умеет работать с удаленными компами. По моему, она дает более структурированную информацию, чем можно нарыть в реестре в "ручную". Конкретные параметры погуглите.
    Ответ написан
    2 комментария
  • Что такое указатели в С++?

    @res2001
    Developer, ex-admin
    Из всего написанного по сути сказано только:
    Указатель — это переменная, хранящая в себе адрес ячейки оперативной памяти

    остальное - какой-то шлак.

    Добавлю от себя про указатели:
    Память в компьютере адресуется побайтово.
    Биты внутри байта адресовать через указатель нельзя.
    Адрес - это просто беззнаковое целое число - номер байта в памяти.
    В 32битных процах максимально доступно 2^32 байта памяти, в 64битных - 2^64.
    Соответственно для хранения адреса в 32битных системах нужно 32 бита, т.е. 4 байта, в 64битных - 64 бита, т.е. 8 байт. Таким образом, в зависимости от разрядности процессора меняется размер указателя.

    Когда некий объект (строка, число, и прочее) сохранен в памяти он не имеет типа - это просто набор байт некоторой длины. Типизацией занимается программа. Например в процессоре существуют наборы арифметических команд для целых 1 байтовых переменных, 2 байтовых, 4 и 8 байтовых (отдельно для знаковых и беззнаковых). Т.е. это реально разные ассемблерные инструкции (например для сложения). Таким образом задавая тип указателя, вы говорите компилятору, что к памяти, адресуемой этим указателем, нужно применять инструкции для этого типа данных.
    Для типизированных указателей можно использовать адресную арифметику, потому что компилятору известен размер типа. Для не типизированных указателей (void*) адресная арифметика не возможна.
    Ответ написан
    Комментировать
  • Я написал программу на c++, но при установке ее на другой копьютер выпадает ошибка MSVCP140D.dll, что делать?

    @res2001
    Developer, ex-admin
    Я предполагаю, что в папку с приложением нужно разместить библиотеки c++.

    Да вы верно думаете. Но делать надо не так.
    Ошибка возникает потому, что в С++ вы, как правило, используете хотя бы STL - а это внешняя библиотека и она должна быть доступна программе во время запуска.
    Но можно собрать программу со статической линковкой с STL, тогда размер исполняемого файла вашей программы будет больше, но тащить за собой ничего не придется.
    В принципе, динамическая линковка с STL - это нормально. Только в случае с программой собранной в MSVC вы должны предоставить пользователю еще и runtime пакет нужной версиии. Микрософт предоставляет эти сборки runtime отдельно от MSVC (можно скачать с сайта). Этот же установщик рантайма лежит где-то в недрах установленной MSVC, можно его там найти при желании.

    Цифры в имени файла dll (140) - это и есть версия нужного вам рантайма. Версия 140 или 14.0. Она идет с MSVS 2015.
    Вот тут статья с перечислением всех актуальных версий рантайма и ссылками на них: https://www.itechtics.com/microsoft-visual-c-redis...
    Ответ написан
    Комментировать
  • Почему в c++ можно задавать статический массив переменной длины?

    @res2001
    Developer, ex-admin
    Это потому что вы компилируете с помощью gcc.
    Вообще в стандарте С++ VLA (variable length array) нет в принципе и это ошибка.
    Но VLA есть в C99 и далее. А gcc с параметрами по умолчанию разрешает использовать расширения, в т.ч. и VLA.
    Стоит включить более строгое соответствие стандарту, как вы получите ошибку и не собираемый код.

    Рекомендую это (включать строгое соответствие стандарту) делать в своих проектах всегда. А так же включать вывод всех предупреждений (-Wall -Wextra) и пытаться добиваться сборки без предупреждений.
    Наиболее "продвинутые" переводят все предупреждения в ошибки, что бы программа в принципе не собиралась с любыми предупреждениями. Это то же делается соответствующей опцией компилятора.
    Часто в таких случаях приходится некоторые предупреждения ставить в игнор, но это делается всегда осознанно, с пониманием для чего это нужно.
    Ответ написан
    3 комментария
  • Есть ли эффективый и не сложный алгоритм посика ярко выраженных пиков в 2D массивах без ML?

    @res2001
    Developer, ex-admin
    Можно находить разность соседних элементов. Если модуль разности больше какой-то величины - ярко выраженный пик.
    Фиксированную величину можно взять как среднее значение разностей или медианное или что-то другое.
    Ответ написан
  • Как откинуть 5 число с массива?

    @res2001
    Developer, ex-admin
    Просто так взять и удалить элемент из массива на Си нельзя.
    Из статического массива удалить нельзя ничего в принципе - его размер не меняется никогда.
    В динамических массивах могут быть варианты:
    Вы можете переписать хвост массива, начиная с шестого элемента, на один элемент вперед, т.е. 6 элемент станет 5 и т.д. Но при этом в конце образуется не используемый элемент, избавится от него можно перевыделением массива с помощью realloc, например. Но если это делать, то проще сразу выделить память под новый массив и скопировать весь первый массив, кроме удаляемого элемента, как писал GavriKos.
    Другой вариант - помечать подобные не используемые элементы каким-то образом. Либо писать в них какое-то значение, обозначающее для вас, что это не используемый элемент, либо хранить где-то отдельно используемый размер массива (так сделано в std::vector).
    Ответ написан
    Комментировать
  • Маскировка виртуальной сетевой карты под железную?

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

    @res2001
    Developer, ex-admin
    Код то где?

    На сколько я знаю, микрософтовский компилятор официально не поддерживает стандартов Си. Так что на самом деле, собирая Сишный код на msvc вы используете некий "микрософт Си" диалект языка.
    Так что не удивляйтесь подобным вещам.
    Некоторые фичи из более современных стандартов Си (С99, С11) в компилятор микрософт до сих пор не завезли или завезли, но в каком-то видоизмененном виде.
    Ответ написан
    Комментировать
  • Как сравнить две даты в dat?

    @res2001
    Developer, ex-admin
    Батники не умеют работать с датами. Тут все переменные строковые.
    Да, set /a умеет целочисленную арифметику, но результат все равно строковый.
    Нужно перевести даты в количество дней с начала эпохи, а потом их уже можно сравнивать стандартными средствами.
    Проще всего использовать для этих целей более продвинутые средства, умеющие работать с датами, например powershel, JS, VBS - эти скрипты при желании можно вызывать из батника.
    Но если очень хочется, можно и батником пересчитать. Алгоритм расчета есть на вики. Код можно дернуть отсюда - https://www.robvanderwoude.com/files/datediff_nt.txt
    Ответ написан
    Комментировать
  • Как правильно ввести данные?

    @res2001
    Developer, ex-admin
    Как вы планируете пользователь должен завершать работу удаленного компа?

    Например, есть команда shutdown - она требует привилегий администратора на том компе, который она будет удаленно перезагружать/останавливать.
    Ее же можно выполнить, находясь в сеансе RDP. Для обычного пользователя в RDP нет возможности выключить комп.

    Самый простой вариант без использования домена - создать на всех компах одного и того же пользователя с админскими правами и одним и тем же паролем. Тогда выключать компы удаленно можно выполнив у себя команду shutdown из под этого пользователя и указав в параметрах удаленный комп.
    Ответ написан
    Комментировать
  • Как вывести результат команды cmd в переменную?

    @res2001
    Developer, ex-admin
    Вот так должно работать:
    for  /f "delims=" %i IN ('net user %username% ^| findstr /C:"Действие пароля завершается" ') DO set var=%i
    Ответ написан