Задать вопрос
  • Почему цикл в C++ застревает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Больших отличий я не заметил


    Я удалил неважные части кода, чтобы большое отличие стало более заметно. Вот что получилось из твоего кода:
    while (num_bor_1 <= num_bor_2)
      {
        if ((num_bor_1 % 2) != 1)
        {
          num_bor_1++;
        }
      }


    А вот что получилось из решения:
    do
      {
        num_bor_1++;
      } while (num_bor_1 < num_bor_2);
    Ответ написан
    Комментировать
  • Почему поведение fscanf ( stdin, "%c", &c ) различается при чтении EOF в msvc и gcc?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    После ввода Ctrl+Z и нажатия Enter, если я правильно понимаю, в потоке появляется только EOF и символ новой строки.

    Это странное заявление. Потому что "конец файла" стандартом С (конкретно, С99) определяется так: end-of-file, that is, no more input from a stream. Это значит, что ни EOF как символ, ни что бы то ни было после конца файла прочитано быть не может. Если чтение работает (т.е. функции чтения не возвращают ошибок, либо ошибки не указывают на конец файла), то конец файла не достигнут.

    Сравните поведение этих программ при обычном запуске и при запуске с перенаправлением ввода из пустого файла. Если есть разница, то это может указывать на то, что нажатие Ctrl+Z в cmd не вызывает закрытие потока ввода для процесса.
    Ответ написан
  • А время с DS1302 всегда-всегда корректное?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    И решение, если я читаю часы-минуты-секунды и получаю в секундах 00 - то мне следует перечитать минуты ещё раз и сделать вывод.

    Обычно в таких случаях самый часто изменяющийся разряд читают дважды -- в начале и в конце чтения составного значения и перечитывают значение целиком если этот разряд изменился.
    Ответ написан
    1 комментарий
  • Почему возникает free(): double free detected in tcache 2? (в деструкторе)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему возникает free(): double free detected

    Потому что в этом классе не реализован конструктор копирования (а так же перемещения и операторы присваивания, но это пока не вызывает таких же ошибок). В результате при копировании объекта класса String копия получает то же значение str что и оригинал с которого она скопирована, в деструкторе копия удаляет str оригинала, а потом это же делает оригинал в своём деструкторе. См. правило трёх/пяти.
    Ответ написан
    Комментировать
  • Почему strcat перезаписывает переменные?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему так происходит?

    Потому что str и word -- это переменные размером в один символ, а в строке char delimeters[6] = " .,!?;" отсутствует 0-терминатор. Поэтому
    - scanf("%s", &str); вылезет за пределы str если ввести здесь что угодно.
    - strcat(&word, &c); вылезет за пределы word если в c будет не пустая строка. А в c будет неизвестно что, потому что c = getchar() не добавляет в эту строку 0-терминатор.
    - strchr(delimeters, c); может вернуть что угодно, если c не входит в delimiters.
    Ответ написан
    8 комментариев
  • Можно ли как то скачать URL сайта сразу в переменную?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Можно заменить URLDownloadToFileA на URLOpenBlockingStream и читать данные из интерфейса IStream который возвращает эта функция.
    Ответ написан
    3 комментария
  • Как правильно считать значение из бинарного файла C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    third = string(buffer1);
    fourth = string(buffer2);

    Должно быть
    third = string(buffer1, size3);
    fourth = string(buffer2, size4);

    поскольку строки прочитанные в buffer1 и buffer2 не 0-терминированные.

    И отдельно
    char buffer1[size3];

    char buffer2[size4];

    это не по стандарту С++, компилируется и работает только из-за расширений GNU.
    Ответ написан
    5 комментариев
  • Почему выводятся не те символы, которые прописаны в коде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    wcout << endl << "Результат: " << encrypt(s);

    ты потерял L перед "Результат" и выводишь в wcout обычную строку.

    А перед этим выводишь в cout. Приведи всё к выводу в wcout.

    Стандарт C++ об этом говорит вот что:
    Mixing operations on corresponding wide- and narrow-character streams follows the same semantics as mixing such operations on FILEs, as specified in the C standard library.

    А стандарт С в свою очередь говорит вот что (C11 7.21.2:4):

    Each stream has an orientation. After a stream is associated with an external file, but
    before any operations are performed on it, the stream is without orientation. Once a wide
    character input/output function has been applied to a stream without orientation, the
    stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
    been applied to a stream without orientation, the stream becomes a byte-oriented stream.
    Only a call to the freopen function or the fwide function can otherwise alter the
    orientation of a stream. (A successful call to freopen removes any orientation.)

    Byte input/output functions shall not be applied to a wide-oriented stream and wide
    character input/output functions shall not be applied to a byte-oriented stream.
    Ответ написан
    7 комментариев
  • Программа не отвечает на кириллические символы - что делать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Помогите мне, пожалуйста, решить эти проблемы

    При условии правильной настройки переменных окружения достаточно заменить setlocale(LC_ALL, "ru"); на setlocale(LC_ALL, "");.
    Ответ написан
  • Почему в risc-5 архитектуре команда jal такая, зачем там перемешиваются биты, почему значение Imm разбросанно?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему просто 20 бит не берется по порядку

    Официальный ответ на этот вопрос прямо написан в спецификации RV32I Base Integer Instruction Set, в разделе 2.3 "Immediate Encoding Variants" на странице 13:
    By rotating bits in the instruction encoding of B and J immediates instead of using dynamic hard-
    ware muxes to multiply the immediate by 2, we reduce instruction signal fanout and immediate
    mux costs by around a factor of 2


    для кого авторы постарались придумать такую ерунду

    для реализаторов спецификации в железе
    Ответ написан
    Комментировать
  • Почему компиляторы не используют инструкции повторения REP movs?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему компиляторы не используют инструкции повторения REP movs?

    чего это "не используют"? Используют.

    Она должна быть в миллиард раз быстрее

    Инструкция которую не нужно читать из памяти, но которая сама лезет в память дважды на каждом цикле своего выполнения не может быть "в миллиард раз быстрее" других реализаций той же логики.
    Ответ написан
    Комментировать
  • Как расширить размер динамического массива типа string в с++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как расширить размер с сохранением данных(realloc) с массивом string в с++

    Думаю, что по честному (т.е. не завязываясь на конкретное внутреннее представление string) -- никак, только выделив новый массив и скопировав/переместив объекты из старого массива в новый. Имеет смысл эту работу делегировать стандартному контейнеру vector, где эта логика уже должна быть реализована.
    Ответ написан
    Комментировать
  • Что возвращает gps модуль neo-6m?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что возвращается в качестве ответа

    Сообщения формата NMEA.

    Вроде все сообщения из твоего ответа по ссылочке описаны. В частности
    $GPGLL,5547.75949,N,03747.58257,E,155030.00,A,A*64
    55°47.75949' северной широты, 37°47.58257' восточной долготы, зафиксировано в 15:50:30.00.
    Ответ написан
    Комментировать
  • Как называется такая практика и является ли она приемлемой?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Является ли нормальной практикой для девелопера создать ветку feature1 от не последнего коммита мастера, то бишь не от "g"

    Да. В частности это стандартная практика разработчиков ядра linux: фичи должны расти от релизов или релиз-кандидатов, а не от каких-то случайных коммитов.

    и потом смерджить feature1 с коммитом X2 затирая изменения f и g?

    Из вопроса непонятно, это требование -- затирать, или это побочный эффект которого хочется избежать?
    Если делать обычный git merge, то никакого затирания не будет. Будут конфликты, если изменения касаются одних и тех же мест, иначе будет объединение изменений ветки и мастера.
    Чтобы затирать изменения можно делать git merge --strategy=ours -- в результате мёржа изменения сделанные в ветке которая мёржится будут потеряны.
    Ответ написан
  • Как экранировать символы в .bash-aliases?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Решил, как порядочный линуксоид вынести алисы в отдельный файл.

    $'/var/www/www-root/data/www\r'

    \r в конце намекает на то, что в этом отдельном файле концы строк виндовые а не юниксовые. dos2unix .bash-aliases должен это пофиксить.
    Ответ написан
    2 комментария
  • Почему не отрабатывает exit на третьем уровне скрипта?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Написали многоуровневое меню при помощи функций, работает без проблем все, кроме выхода.
    Примерно на 2-3 уровне меню "Exit" не выходит из скрипта, а возвращается на уровень выше.

    всё зависит от того, как эти функции вызываются. Если так:

    clear; ./1_1_ipmi_menu.sh ; unem ;;

    то разумеется вызов exit внутри скрипта 1_1_ipmi_menu.sh приведёт в возврату в unem, вы же тут отдельный процесс создаёте.
    Чтобы exit в функциях приводил к выходу из приложения нужно импортировать (source) функции из этих скриптов и вызывать функции вместо запуска скриптов.
    Типа того:
    #!/bin/bash
    unem() {
            read b
            case $b in
              1) clear ; … ; unem ;;
              2) clear; PMI ; unem ;;
              3) clear ; menu ;;
              0) exit 0 ;;
            esac
    }
    source 1_1_ipmi_menu.sh
    source 1_1_system_menu.sh
    unem
    Ответ написан
    Комментировать
  • Почему ptrace если не через execl не работает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Потому что PTRACE_TRACEME не останавливает вызывающий процесс, а значит у родителя нет возможности заказать остановку по системному вызову. Останавливают трассируемый процесс только сигналы и явно запрошенные трассировщиком события.
    В частности, вызов execve трассируемым процессом вызывает отправку ему сигнала SIGTRAP.
    Можно вставить перед 20й строкой какой-нибудь asm volatile ("int3"); и это тоже вызовет доставку сигнала, останов и трассировку последующих вызовов write.
    Ответ написан
  • Ubuntu выводит -bash: nohub: command not found, что делать?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    -bash: nohub: command not found,

    команда называется nohup, сокращение от no hangup.
    Ответ написан
    3 комментария
  • Почему не получается скомпилировать файл через wsl на c?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    make mario.c

    говорит, что нужно собрать mario.c, но собирать ведь надо не его, mario.c -- это исходник. Пиши make mario чтобы собрать mario из mario.c. И да, это работает без Makefile за счёт втроенных в make правил только для таких простых случаев. Для более сложных надо будет писать Makefile.
    Ответ написан
    2 комментария
  • Как сделать вызов функции из терминала чтобы обработчик динамически искал и вызывал функцию?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    обработчик динамически ищет и выполняет функцию

    У этой задачи есть два больших класса решений -- системно-независимые и системно-зависимые, в зависимости от дополнительных условий. Для начала надо ответить на вопрос "где ищет". Если ответ на этот вопрос -- "в твоём приложении", а набор функций фиксированный, то можно построить отображение "имя функции" -> "адрес функции" с использованием какого-нибудь массива или хеш-таблицы и искать с его помощью.
    Если набор функций не фиксирован во время сборки приложения, или искать надо за пределами приложения, нужно ответить ещё на один вопрос: "знают ли функции о том, что их будут выполнять или нет". Если знают -- опять же построить отображение "имя функции" -> "адрес функции" и каким-нибудь образом сделать его доступным приложению. Если речь идёт о вызове произвольных заранее неизвестных функций, остаётся вариант с динамической загрузкой и поиском имён -- dlopen/dlsym или LoadLibrary/GetProcAddress для венды.
    Ответ написан
    Комментировать