Задать вопрос
  • Я человек не очень понимающий. Скажите пожалуйста что я не так сделал ( программа вылетает при работе)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что я не так сделал?

    Как минимум вот это:
    double** a = new double *[n];
      int min;
      for (int k = 0; k < n; ++k)
      {
        for (int j = 0; j < n; ++j)
        {
          cout << "Enter element:";
          cin >> &a[k][j]);
        }
      }

    Ты представил матрицу как массив указателей на строки, выделил память под этот массив, но не выделил память под сами строки.
    Ответ написан
  • Функция gets() в C?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Первые два работают нормально, но когда доходит до 3, он не выполняется и длина выводится 0?

    Потому что scanf("%d", &n); зачитывает только один int из стандартного ввода. Если ты вводишь число и жмёшь enter, то конец строки остаётся в потоке ввода и читается gets'ом.
    Поэтому нужно либо вводить строку предназначенную для gets следом за числом предназначенным для scanf, либо scanf сделать таким: scanf("%d ", &n);
    Ответ написан
    Комментировать
  • Как отредактировать вывод команды find?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    архив создается по такому пути /etc/backup/./cron.monthly.tar.gz, а надо по такому /etc/backup/cron.monthly.tar.gz.

    Это один и тот же путь записанный разными способами, в чём проблема?
    Ответ написан
    1 комментарий
  • Как посоветуете парсить tcpdump?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    есть ли готовый инструмент, чтобы искать и вылавливать всякие срачи

    в iptraf есть режим LAN station monitor, там показывается сколько пакетов/байтов откуда приходит/уходит и можно отсортировать:
    5dcb1faeedada560597943.png

    Им ARP'ы нужны? Я почему сомневаюсь - вроде как им ARP-запросы нужны, чтоб найти PPPoE концентратор.

    RFC на протокол читал? Что понял?
    Подсказка: ARP связывает MAC с IP. А PPPoE -- ни разу не IP.
    Ответ написан
    Комментировать
  • Как выбрать нужно количество строк из файла?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    tac file | sed -n '1,/^$/{/./p}' | tac
    Первый tac читает файл задом наперёд, sed вырезает первый блок непустых строк, второй tac переворачивает этот блок в исходное состояние.
    Ответ написан
    7 комментариев
  • Как передать двумерный статический массив в функцию на Си?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть массив char mass[1024][1024] и функция int fun(char*)

    в такую функцию можно передать fun(&mass[0][0]).

    Есть ли возможность для указания статического массива как аргумента?

    В смысле массива статической размерности? Легко: int fun(char a[][1000]); ... fun(mass);
    Ответ написан
  • Как запустить приложение через forkpty?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    может быть так?

    #include <pty.h>
    #include <unistd.h>
    #include <thread>
    #include <future>
    #include <iostream>
    #include <string>
    
    ssize_t sz = 1;
    
    int main()
    {
      int mfd;
    
      pid_t pid_fork = forkpty(&mfd, NULL, NULL, NULL);
    
      if (!pid_fork) {
        // Дочерний процесс
        execl("/bin/sh", "-", NULL);
      } else {
        // Родительский процесс
        char buf[1024];
    
        // Async
        auto future = std::async(std::launch::async, [mfd]() {
          std::string line;
          while (sz) {
            std::getline(std::cin, line);
            line = line  + "\n";
            write(mfd, line.c_str(), line.size()); // Нужно направить в дочерний процесс как stdin
            std::this_thread::sleep_for(std::chrono::milliseconds(100));
          }
        });
    
        while (sz = read(mfd, buf, sizeof(buf))) {
          write(STDOUT_FILENO, buf, sz); // Вывод из дочернего процесса stdout
          std::this_thread::sleep_for(std::chrono::milliseconds(100));
        }
    
        exit(0);
      }
    }

    Поскольку это теперь терминал, то имеет смысл установить размеры pty такими же, как у терминала вызывающей программы, например так:

    ...
    #include <sys/ioctl.h>
    ...
      struct winsize ws, *pws = NULL;
    
      if (ioctl(1, TIOCGWINSZ, &ws) >= 0)
        pws = &ws;
      pid_t pid_fork = forkpty(&mfd, NULL, NULL, pws);


    Кроме того, sleep_for в циклах чтения и записи не нужен, поскольку операции чтения присутствующие в обоих циклах -- блокирующие. Но нужна проверка того, что записались все прочитанные данные.
    Ответ написан
    1 комментарий
  • Как сделать массив произвольной длины?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как быть? Какой размер массива объявить?

    Не объявляй никакой. Воспользуйся вместо этого стандартным контейнером, например std::vector.
    Но если хочется помучаться -- воспользуйся указателем и выделяй память динамически, по мере поступления входных данных.
    Ответ написан
    Комментировать
  • Множественный вызов конструктора базового класса при виртуальном наследовании?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    напрашивается вопрос "Будет ли конструктор базового класса A вызываться два раза, ведь в конструкторе C тоже вызывается конструктор A?".


    Нет, не будет, потому что нет, при конструировании объекта класса D конструктор A из конструктора C не вызывается. См.:
    A mem-initializer where the mem-initializer-id denotes a virtual base class is ignored during execution of a constructor of any class that is not the most derived class.
    Ответ написан
    Комментировать
  • Как оперативно оповещать пользователей о сбоях?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как оперативно оповещать пользователей о сбоях?

    Рассылкой писем. Там тебе и группы пользователей, и решение готовое и проверенное, и все желающие смогут настроить перенаправление этих писем сразу в мусорку.
    Ответ написан
    5 комментариев
  • Как запустить команду на выбранном дисплее?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    DISPLAY=:99 -- это переменная окружения, её надо впихнуть в параметр env:
    env = os.environ
    env["DISPLAY"] = ":99"
    subprocess.run(["telegram-desktop", "-debug", "-tosettings", "-many", "-workdir", "/home/qwentor/share/prog/tgprofiles/"+phone], env=env)
    Ответ написан
    Комментировать
  • Почему данные не записываются в реестр?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    LONG error = RegCreateKeyEx(...);
      if (hKey) {

    Ошибок нет, но и результатов нет !

    Ошибок нет, потому что ты не проверяешь код ошибки, а вместо этого проверяешь hKey.
    Если внимательно прочитать https://docs.microsoft.com/en-us/windows/win32/sys... то можно увидеть для KEY_WOW64_32KEY, что
    This flag must be combined using the OR operator with the other flags in this table that either query or access registry values.

    Подозреваю, что там должно быть KEY_WOW64_32KEY | KEY_SET_VALUE.

    RegSetValueA(hKey, "test", REG_SZ, (LPCSTR)path.c_str(), sizeof(path.c_str()));

    Не sizeof. И код ошибки тоже не проверяешь.
    Ответ написан
  • Как хранятся числа в памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    struct Data {
      short id;
      double val;
    };


    я понимаю что 32 00 11 49 - это интовское значение

    в этой структуре short int, 2 байта. 0x32 0x00 -- это оно (0x32 + 256 * 0x00 = 50), little endian.
    0x11 0x49 -- это мусор. 0x02 0x56 0x00 0x00 идущие дальше -- это тоже мусор.
    0x33 0x33 0x33 0x33 0x33 0x33 0xf3 0x3f -- это double (0x3ff -- порядок, 0x3333333333333 -- мантисса, значение = 0x1.3333333333333 * 2 ^ (0x3ff - 1023) = 1.19999999999999995559), little endian, ieee754.

    Как в данном выводе понять где выравнивание происходит?

    Можно воспользоваться макросом offsetof.
    Ответ написан
    5 комментариев
  • Как понять условие задачи?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я подумал, что граф всегда можно разбить на две множества так, чтобы вершины, соединенные максимальным ребром были в одном множестве, а остальные вершины в другом, то-есть ответом всегда будет максимальное ребро. Я протестировал свое решение в яндекс.контест и получил ошибку на 8 тесте. Подскажите пожалуйста, что я не правильно понял из условия?
    Может есть контрпример?

    Контрпример: квадрат, верхнее ребро -- 2, боковые -- 1, нижнее -- 0. В терминах входных данных для задачи:
    4 4
    0 1 2
    1 2 1
    2 3 0
    3 0 1

    Если разбивать твоим алгоритмом, то в одно множество попадают две верхние вершины, во второе -- две нижние. Тогда "ребро минимального веса, соединяющее вершины из одного множества" -- это ребро соединяющее две нижние вершины (2 3), его вес -- 0.
    Но если разбить граф на две левые вершины (3 0) и две правые (1 2), то "ребро минимального веса, соединяющее вершины из одного множества" имеет вес 1, что лучше, чем 0.
    Ответ написан
    Комментировать
  • Как написать алгоритм движения по спирали на Arduino?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    к сожалению, я не силен и был бы благодарен за помощь.

    Этот сайт работает немного по-другому. Сюда приходят с конкретными вопросами чтобы получить на них ответ.
    Я вижу следующие несколько первых вопросов для вашей задачи:
    1 какая спираль имеется в виду? (архимедова/логарифмическая/с прямыми углами/...?)
    2 как нужно управлять колёсами, чтобы заставить тележку двигаться по выбранной в п.1 спирали?
    3 как запрограммировать ардуино, чтобы она управляла двигателями тележки в соответствии с п.2?

    Определитесь с п.1 и 2 для начала, они не требуют знания ардуины. После этого разберитесь со своей схемой -- что там за двигатели, как они подсоединены к колёсам, как управляются. И если после этого останутся вопросы по п.3 -- приходите.
    Ответ написан
    4 комментария
  • Как изменить строку, инициализированную при объявлении массива символьных указателей, с помощью scanf?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char * suit [4] = { "Hearts", "Diamonds", "Clubs", "Spades" };

    Как изменить строку, инициализированную при объявлении массива символьных указателей, с помощью scanf?

    В данном случае -- только выделив память для новой строки, сделав scanf туда и присвоив указатель на выделенную память элементу массива suit. Напрямую в первоначальный массив -- никак, потому что указатели указывают на константные строки (а возможность писать char * вместо const char * -- это устаревшее средство обеспечения совместимости с древними версиями стандарта).
    Ответ написан
    3 комментария
  • Разбираюсь с умножением в ассемблере, почему так работает, а так нет?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    программа ломается во время выполнения

    Как ломается-то?

    use32
    mov ax,3h
    mov bx,4h
    mul bx

    должно записать 12 в ax и 0 в dx и очистить флаги OF и CF. Что записывает?
    Ответ написан
    Комментировать
  • Может ли процессор изменять порядок инструкций в программе?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Насчет компиляторов поверю, но вот процессора ??? как ???

    Читать тут, лучше сразу английскую версию.
    Ответ написан
    Комментировать
  • Как по полному имени файла получить номер записи MFT?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как по полному имени файла получить номер записи MFT?

    Попробуй поля nFileIndexHigh и nFileIndexLow структуры BY_HANDLE_FILE_INFORMATION приходящей из GetFileInformationByHandle.
    Ответ написан
    1 комментарий
  • Си. Как добавить программу в автозагрузку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как добавить программу на Си в автозагрузку Windows?

    Так же как и на любом другом языке -- прописав её в соответствующий ключ реестра.

    И еще: как искать информацию на ответы по Си, если я пишу в гугле "Си как добавить программу в автозагрузку", но везде появляется только С++? Нереально найти ответ.

    Потому что ты задаёшь неправильный вопрос. Язык -- это способ делать действия, а не сами действия. Добавить программу в автозагрузку можно через реестр. Писать в реестр можно через winapi. Справка по winapi есть тут.
    Ответ написан
    Комментировать