Задать вопрос
  • Как правильно изменить размер выделенной памяти?

    @res2001
    Developer, ex-admin
    В Cи нет строк как таковых - там строка это массив байт с завершающим нулевым байтом в конце.
    А массив в Си - это указатель.
    В С++ используйте string - его для этого и придумали, чтоб не парится в каждом приложении с подобными вещами.

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

    @res2001
    Developer, ex-admin
    Вам же элементарно нужно строку сформировать.
    В цикле по массиву koef бежим:
    1.если коэффициент не 0:
    1.1.выводим сам коэффициент из массива
    1.2.Если коэффициент не последний: выводим строку "x^" + str(degree - i)
    Ответ написан
    Комментировать
  • Почему не работает команда SET в командной строке так, как должна работать? И как сделать так, чтобы работало?

    @res2001
    Developer, ex-admin
    У меня работает :-)
    Уберите пробелы до и после равно - вы создаете переменную с именем "PATH "
    Ответ написан
    2 комментария
  • Как собрать на linux программу на писанную на с++ без Gcc/g++?

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

    @res2001
    Developer, ex-admin
    Адрес, начинающийся на 77 - белый. Список серых адресов фиксированный, официально задокументированный в RFC и вовсе не тайна. По ссылке смотрите адреса в таблице п.3 с пометкой "Private-Use Networks".
    Увидеть реально выданный адрес вы можете только на роутере, т.к. если роутер получает серый адрес, значит для выхода в инет трафик должен проходить через NAT провайдера, где адрес подменяется и в инете вы уже с белым адресом в любом случае.
    Обычно роутеры поддерживают не только веб управление, но и SSH и возможно telnet. Используя их вы можете скриптом получать адрес, проверять его и если он серый, то другим скриптом ребутить роутер (или даже не ребутить, а сбрасывать соединение и устанавливать снова). То же самое можно сделать и через веб интерфейс, но формировать свои HTTP запросы и парсить HTTP ответы роутера более утомительная задача, чем вариант с ssh/telnet.
    Ответ написан
    1 комментарий
  • Как отправить mail из скрипта cmd/powershell?

    @res2001
    Developer, ex-admin
    Из cmd встроенными средствами отправить почту нельзя.
    Вариант с телнетом работает, но родной виндовый телнет клиент (который надо еще устанавливать из компонентов) не поддерживает какой-либо автоматизации. Вручную с его помощью отправить письмо можно, автоматически - нет.
    Можно найти любой другой телнет клиент, которым можно управлять с помощью параметров командной строки или еще другим способом, либо найти консольный почтовый клиент, которые то же имеются. Но все это сторонние средства, которых нет в составе винды.
    Ответ написан
  • С какими сложными случаями отладки вы сталкивались?

    @res2001
    Developer, ex-admin
    Был опыт реализации на Си мат.модели, написанной на Матлабе физиками.
    Модель считала все в double. На Си для скорости использовали float. На прямую результат проверить было не возможно как минимум из-за ошибок округления, а если еще появлялись ошибки в Си реализации (а они были), то вообще труба, т.к. не ясно было даже в какой части кода ошибка.
    Пришлось полностью реализовать модель на Python с возможностью переключения режима расчета выставлением одной опции с double на float. Эту промежуточную модель отладили с первоначальной моделью в режиме double. Затем переключили на float и отлаживали реализацию на Си с промежуточной моделью.
    Работы много, но другого способа подтверждать правильность реализации мы не придумали.
    В итоге схема получилась вполне рабочая.

    Теоретически можно было доработать Матлаб модель, чтоб она работала с floatами, но в Матлабе оказалось достаточно проблематично контролировать каждую операцию. На пинтоне это сделать можно.
    Ответ написан
    Комментировать
  • Можно ли через bat файл изменить строки в текстовом файле?

    @res2001
    Developer, ex-admin
    Можно и голым батником, без сторонних средств, но с некоторыми ограничениями.
    Но проще, как сказал Борис Сёмов использовать специально для этого предназначенные утилиты типа sed.
    Ответ написан
  • Как сделать выбор операционки при загрузке?

    @res2001
    Developer, ex-admin
    В линуксе по любому уже используется какой-то загрузчик (скорее всего grub), можно его сконфигурировать чтоб он еще и винду грузил.
    Ответ написан
    8 комментариев
  • Создать "пакет" и отправить?

    @res2001
    Developer, ex-admin
    Добавлю свои пять копеек:
    Мало собрать и отправить пакет. Пакет должен кто-нибудь получить на принимающей стороне. Если принимающая сторона неготова принять ваш пакет, то он будет просто отброшен.
    Чтобы принять пакет на принимающей стороне должен работать "сервер" и слушать "порт". Например в вебе браузер это клиент (сторона отправляющая запросы), когда вы вводите в адресную строку браузера имя сайта, то на этот сайт отправляется запрос. Сайт в простейшем случае - это компьютер, расположенный где-то в интернете. На нем запущен веб-сервер, который принимает запросы от клиентов. Если веб-сервер остановить, то сайт перестанет отвечать на запросы даже если сам компьютер будет работать.
    Команда ping не требует для своей работы сервера, т.к. функционал сервера встроен непосредственно в стек протоколов tcp/ip и система сама отвечает (если трафик pingа не блокируется фаерволом).

    Не понятно, почему вы зациклились на отправке пакетов роутеру? Когда отправляете пакет, то указываете адрес назначения пакета, а протокол сам решает как конкретно будет отправлен ваш пакет. Даже если это адрес yandex.ru и вы не знаете где он фактически находится, то TCP/IP + DNS разберутся с этим сами.

    Обычно роутеры поддерживают управление через web, ssh, telnet (что-то из списка может быть выключено или не поддерживаться на данной модели). Используя клиенты для этих протоколов вы можете отправлять команды роутеру. Например ssh - это удаленная командная строка, выполняться команды будут на роутере, а вы будете видеть результат выполнения. Для web клиентом может быть не только браузер, но и curl или wget или ваша собственная программа.
    Ответ написан
    Комментировать
  • Есть адрес сети 192.168.01.0, нужно разбить на 20 подсетей с максимально возможным количеством узлов. Как выбрать маску?

    @res2001
    Developer, ex-admin
    Для адреса сети 192.168.1.0 обычно используется маска 24 (т.е. 255.255.255.0), хотя было бы не плохо, чтоб в условии задачи была явно задана маска.
    Что бы поделить эту подсеть на 20 подсетей нужно увеличить маску на несколько бит. Число 20 может быть представлено минимум 5 битами. Поэтому увеличиваем маску на 5 бит. Получаем маску 29 (24+5) (т.е. 255.255.255.248). Количество хостов в каждой из 32, поучившихся подсетей максимум 8 (но т.к. 0 и последний адрес являются широковещательными, то на самом деле их 6).
    Примеры получившихся подсетей:
    192.168.1.0/29 - адреса хостов: 192.168.1.0 - 192.168.1.7
    192.168.1.128/29 - адреса хостов: 192.168.1.128 - 192.168.1.135
    192.168.1.168/29 - адреса хостов: 192.168.1.168 - 192.168.1.175
    192.168.1.248/29 - адреса хостов: 192.168.1.248 - 192.168.1.255

    Подсетей получилось 32, а не 20, т.е. 12 подсетей будет не использовано. На практике обычно бывает, что есть дополнительные условия. Например некоторые из 20 подсетей имеют больше 6 хостов, но в большинстве подсетей 2-3 хоста. В этом случае можно оптимизировать деление на подсети - использовать не равномерное разделение (одна маска), а разную длину маски для разных подсетей в зависимости от дополнительных условий.
    Ответ написан
    Комментировать
  • Из-за чего режим адаптера 100, а не 1000?

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

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

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

    @res2001
    Developer, ex-admin
    через Ubuntu винда запускается отлично

    Что это значит?

    С помощью загрузочной флэшки с live системой (можете взять например эту: https://adminpe.ru) протестируйте комп: память, диск, нагрузочное тестирование.
    Если все нормально, переустановите винду с правильного микрософтовского дистрибутива.
    Ответ написан
  • Почему "Неверное имя пользователя и пароль при попытке запустить проводник от имени администратора"?

    @res2001
    Developer, ex-admin
    Узнать имя пользователя, под которым вы работаете в данный момент можно с помощью команды:
    set USERNAME

    По умолчанию стандартная учетная запись пользователя Администратор (для русской винды) заблокирована и ее нельзя использовать.

    Единственный пользователь системы должен обладать правами администратора, иначе вы ничего не смогли бы установить в винду.

    Поскольку в винде есть UAC, то даже запустив что-либо под пользователем с правами администратора, вы этих прав реально не имеете и требуется повышение привилегий.
    Стандартными средствами повысить привилегии запускаемой из сценария программы можно с помощью powershell скрипта (легко можно нагуглить, он открывает окно запроса повышения привилегий) или с помощью других сторонних утилит (например nircmd, есть и другие).
    Ответ написан
  • String или char*?

    @res2001
    Developer, ex-admin
    И какое различие между char* и char[]?

    char* str1 = "Hello world!";
    char str2[] = "Hello world!";
    Разница между str1 и str2 в том, что str1 - это lvalue, а str2 - нет.
    Т.е. с str1 вы можете, например сделать str1 = str1 + 1; а с str2 нет.

    С точки зрения памяти:
    В случае str1 в памяти хранится 2 сущности: 1) сама строка "Hello world!" 2) указатель, которому присваивается адрес строки. Поэтому вы можете присвоить другое значение указателю.
    В случае str2 указателя в памяти нет, есть только строка. Адрес строки знает компилятор и использует его когда нужно. Но присвоить новое значение этому адресу уже не возможно.
    Можно считать, что char str[]; это то же что и char * const str;
    Ответ написан
  • Что делать если линковщик ругается на "неразрешённый внешний символ"?

    @res2001
    Developer, ex-admin
    Вы подключили x64 библиотеку, а собираете x32 проект, естественно компилятору это не нравится.
    Подключите x32 версию библиотеки, или собирайте проект как x64.
    На самом деле можно делать обе версии и в каждой задать использование правильной версии библиотеки.
    Ответ написан
    2 комментария
  • Нужно ли открывать порт для TCP подключения?

    @res2001
    Developer, ex-admin
    Открывать порт нужно. Даже, если вы будете использовать UDP.
    Порт нужно открывать как в программе так и в фаерволе ОС (на слушающей стороне).
    Ответ написан
    3 комментария
  • VS 2017, не может найти библиотеку при линковке?

    @res2001
    Developer, ex-admin
    Указать в свойствах проекта для линковки дополнительный путь к каталогу, где лежит библиотека.
    Ответ написан
    2 комментария