Ответы пользователя по тегу C++
  • Разделить число на разряды c++?

    @res2001
    Developer, ex-admin
    Откройте для себя операцию взятия остатка от деления - % (в вашем случае на 10), с ее помощью ваша задача решается тривиально.
    Ответ написан
    Комментировать
  • Почему не работают массивы переменной длины?

    @res2001
    Developer, ex-admin
    Поддержка VLA (и вообще всех новых расширений языка), действительно, зависит от компилятора.
    Например в MSVC, по моему, до сих пор поддержки VLA нет.
    Официально микрософт заявляет о поддержке С90: https://docs.microsoft.com/en-us/cpp/c-language/an...
    Но в компиляторе присутствуют расширения языка (по умолчанию включенные), список расширений можно посмотреть в описании опции компилятора /Zc, и VLA там нет.
    При том, что присутствуют некоторые расширения из С++17.
    Кроме того присутствуют некоторые вещи, которые появились в С99, но их в "расширениях" нет, они уже вошли в компилятор "по умолчанию", например переменное количество аргументов в #define.
    Ответ написан
    2 комментария
  • Как используются ссылки и указатели в С++?

    @res2001
    Developer, ex-admin
    Указатель - это такая же переменная как и все остальные, т.е. область памяти для хранения целочисленного значения. Чтоб ее использовать, ее нужно сначала инициализировать корректным значением, иначе получите ошибку/предупреждение на этапе компиляции.
    Т.е. чтоб использовать *p, в p должно лежать корректное значение, поэтому перед этим оператором идет присваивание. В принципе ваш пример откомпилируется, но скорее всего он вызовет падение программы, т.к. адрес 0x1010101 взят с потолка и скорее всего укажет в нераспределенную область памяти. Может и не вызвать падение, тут уж как повезет.
    Ответ написан
    Комментировать
  • Как закрыть фоновый экземпляр программы?

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

    @res2001
    Developer, ex-admin
    Ваша функция работает делает свое дело за 1 проход по массиву, второй вариант - за shift проходов - сложность O(N) и O(N*shift) соответственно. Во втором случае скорость зависит от величины сдвига, что очень плохо для такого алгоритма.

    Циклический сдвиг массива "на месте" реализуется с помощью трех операций revers (операция изменения порядка элементов на противоположный):
    1.весь массив делится на 2 массива в точке сдвига (условно, без выделения памяти)
    2.revers первой части
    3.revers второй части
    4.revers всего массива
    Встречал на stackoverflow реализацию на Си.
    Работает за 2 полных прохода с операциями swap по массиву - O(2*N), но каждая операция тяжелее чем в ваших вариантах. Но быстродействие не зависит от величины сдвига и не требует дополнительной памяти, что может быть важно при работе с массивами большой размерности.
    UPD: вспомнил, этот способ был описан в книге Бентли "Жемчужины программирования"!
    Ответ написан
    Комментировать
  • С++ Как поменять символ на другой?

    @res2001
    Developer, ex-admin
    a[2]='n';
    В двойных кавычках - это строка с завершающим нулем, даже если она содержит 1 символ. В одинарных кавычках - символ.
    Ответ написан
    Комментировать
  • Какую литературу выбрать для изучения WINAPI?

    @res2001
    Developer, ex-admin
    PVOID - void*
    PWSTR - wchar_t *
    HANDLE - просто целое, подробностей, обычно, знать не нужно - это идентификатор объекта (хэндл).
    И берите Русиновича по совету 15432
    Ответ написан
    3 комментария
  • Как сделать невидимое консольное приложение - видимым?

    @res2001
    Developer, ex-admin
    Попробуйте в настройках службы, в командной строке запуска приложения, сделать перенаправление потоков стандартного вывода и ошибок в файл:
    proga.exe 1>praga.log 2>&1
    тогда сможете видеть в файле весь вывод приложения без окна. Файл должен быть доступен на запись для пользователя, под которым запускается приложение/служба.
    Настройки всех служб хранятся в реестре в HKLM\System\CurrentControlSet\Services
    Ответ написан
    1 комментарий
  • Альтернатива Visual Studio?

    @res2001
    Developer, ex-admin
    В качестве компилятора подойдет msys2/mingw64 или тот же микрософтовский компилятор, его можно установить отдельно от студии.
    На счет библиотек - в msys2 есть пакетный менеджер, можно установить огромное количество свободные библиотеки и использовать их. Для микрософтовского компилятора либо придется искать уже готовые бибилотеки, либо собирать самому из исходников (обычно это не вызывает особых проблем).
    Ответ написан
    Комментировать
  • VisualStudio не удается запустить программу. Не удается найти указанный файл.(?

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

    @res2001
    Developer, ex-admin
    Сама по себе strcpy - нормальная, просто ею не умеют правильно пользоваться. И она ничего не делает для предотвращения не правильного использования. Зато она быстрее своих более безопасных аналогов.
    Улучшенная strncpy сокращает варианты не правильного использования.
    Но если тебе важна скорость выполнения, и ты уверен, что хорошо понимаешь как работает функция и предпринял все необходимое, чтоб функция не сработала не правильно, то почему бы и не пользоваться strcpy?
    Ответ написан
    Комментировать
  • Как удалить часть строки в c++?

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

    @res2001
    Developer, ex-admin
    не так сильно раздражать антивирусы

    Будет точно так же раздражать антивирусы.
    И вообще - причем тут wininet? Это системная библиотека, думаете антивирусы не дружат с виндой?
    Ответ написан
    Комментировать
  • Изменяю значение по ссылке, в чем моя ошибка?

    @res2001
    Developer, ex-admin
    К вашему вопросу отношения не имеет, но:
    В main вы выделяете память для массива из 0 элементов.
    int N=0;
    char str[N];
    Как думаете сколько памяти выделится под этот массив?
    Еще вы, видимо, считаете, что инкрементируя N вы увеличиваете размер массива? Это не так - увеличивая N вы никак не влияете на str.

    PS: создается впечатление, что VLA для новичков - это зло.
    Ответ написан
    5 комментариев
  • Как вытащить указатель на окно в перехваченной функции EnumWindows?

    @res2001
    Developer, ex-admin
    Нужно знать что там закодировано.
    Обычно это указатель на какую-либо структуру.

    И почему не так:
    PNT_ENUMWINDOWS TrueEnumWindows = ::EnumWindows;
    ?
    Вы не используете /DEFAULTLIB для сборки?
    Ответ написан
  • Unittests в Qt, как правильно организовать структуру проекта?

    @res2001
    Developer, ex-admin
    Вообще то юнит тесты (модульные тесты) не предназначены для встраивания в приложение. Тест это отдельное приложение, предназначенное для тестирования компонентов (функций, классов и т.п.) основного приложения. Обычно тесты не входят в состав релиза приложения (я не говорю сейчас про приложения распространяемые в исходниках, в этом случае тесты часто идут в составе).
    Что бы сделать то что вы хотите, просто пишите тест как часть приложения, без использования библиотек предназначенных для модульных тестов. Это будет быстрее.
    В принципе, что-то можно использовать из них с учетом того, что большая их часть выводит информацию на консоль, создает свою функцию main, ... Т.е. что-бы использовать их не по назначению нужно хорошо знать внутреннюю организацию и понимать как оно работает.
    Ответ написан
    1 комментарий
  • Как правильно перевести wstring в char* и обратно?

    @res2001
    Developer, ex-admin
    Если речь идет о винде, то есть функции API для конвертации: WideCharToMultiByte/MultiByteToWideChar
    Под линухом, наверное нужно использовать какую-либо библиотеки или самому конвертировать.
    Ответ написан
    Комментировать
  • Как выбрать компилятор при установки BOOST?

    @res2001
    Developer, ex-admin
    В комплект студии входят батники для настройки переменных окружения. Запустите такой батник из комплекта VS2008, потом в открывшемся окне командной строки перейдите в каталог с boost и запустите его батник для сборки. BOOST должен будет собраться компилятором и стандартной библиотекой от VS2008.
    Ответ написан
  • Ресурсы по современному C++?

    @res2001
    Developer, ex-admin
    На ютуб канале меэйл.ру есть неплохой курс по "углубленному" С++. Не скажу, что там про "современный", но некоторые моменты затрагиваются. В целом курс не плох, имхо.
    Ответ написан
    Комментировать
  • В чем различие между объявлением с new и без него?

    @res2001
    Developer, ex-admin
    new выделяет память в куче, а определение без new - на стеке, со всеми вытекающими преимуществами и недостатками. Нужно понимать когда определять объект в куче, а когда на стеке.
    Ответ написан
    Комментировать