Задать вопрос
  • Как писать makefile?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как бы Вы написали в makefile если бы у Вас имелось 0.c 1.c 2.c 3.h? Заголовочник 3.h для всех исходников


    OBJS := 0.o 1.o 2.o                     # список объектников, который нам понадобится в двух местах
    all: exe                                # традиционно сборка всего называется all. all зависит от единственного файла: exe
    exe: $(OBJS)                            # файл exe зависит от объектникоа
            $(CC) $(LDFLAGS) -o $@ $^       # чтобы собрать exe -- вызвать компилятор, передать ему LDFLAGS, выводить в $@ (т.е. в exe), на вход брать $^ (т.е. всё от чего зависит $@)
    %.o: %.c 3.h                            # объектники зависят от исходников с таким же именем, а так же от 3.h
            $(CC) -c $(CFLAGS) -o $@ $<     # чтобы собрать объектник -- вызвать компилятор с ключом -c, передать ему CFLAGS, выводить в $@ (т.е. в %.o), компилировать $< (т.е. %.с с тем же именем)
    clean:                                  # традиционно очистка всего называется clean
            -rm -f $(OBJS) exe              # для очистки удалить объектники и exe
    .PHONY: all clean                       # all и clean -- это не файлы
    Ответ написан
    1 комментарий
  • Как сделать squash коммитов по функ. блокам внутри ветки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Задача слохпнуть все в 5 коммитов по основным блокам. Как это сделать?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    struct tableI
    {
      char* name[4];
      float doctor[100];
      float bunk[100];
    } tableI;
    ...
      struct tableI a;
    ...
      get_name(a.name[0]);

    Почему при выводе блока с таблицой выбивает ошибку?

    Потому что ты вызываешь get_name с неинициализированным указателем a.name[...]. Чтобы это место заработало, надо каким-нибудь образом выделить память для a.name[...]. Например таким:

    struct tableI
    {
      char name[4][100];
      float doctor[100];
      float bunk[100];
    } tableI;
    Ответ написан
    3 комментария
  • Что это такое за ошибка в Oracle linux server?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что это такое за ошибка в Oracle linux server

    Не может примонтировать корневую файловую систему.

    по незнанию я увеличил, оказалось то, что так увеличивать нельзя

    Похоже на причину.

    что теперь делать я вообще не знаю, новичок в этом

    Новичку проще всего будет поставить линукс заново.
    Ответ написан
    Комментировать
  • Почему не работает функция strcpy?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    strcpy(A[i+1].firstName, A[i].firstName);
    ...
    A[i].age = A[i+1].age;

    суть конкретно этого куска задачи — удаление строки с данным(делаю путем переприсваивания на следующую строку и уменьшением количества строк на единицу)

    strcpy копирует второй аргумент в первый, как оператор присваивания.
    Ответ написан
    Комментировать
  • Вывод ошибок скрипта Python в файл?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    перенаправить все что он выводит

    python test.py >& log.txt
    Ответ написан
    Комментировать
  • Это одно и тоже с точки зрения стандарта?

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

    А вот и нет. A a(); -- это объявление функции a, без параметров, возвращающей значение типа A.


    И получаем странную ошибку при компиляции:
    ssd1306_128x32_i2c_test.ino:50:3: error: request for member 'f' in 'a', which is of non-class type 'A()'

    В сообщении об ошибке об этом явно написано.
    Ответ написан
  • Как зашифровать пакет на C/C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть две машины, подключенные через маршрутизатор.
    написать драйвер устанавливающий соединение, обмен ключами и шифрование всех пакетов между машинами

    Читать про IPsec. Драйвер не нужен.

    на каком уровне OSI

    IPsec работает на сетевом (3-м) уровне.
    Ответ написан
    Комментировать
  • Как переименовать названия картинок в правильной последовательности, начиная от 1-ы, в зависимости от даты создания оригинальной картинки?

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

    Чтобы перенумеровать файлы в порядке возрастания времени их последней модификации:
    ls -rt $p/*.jpg | while read i ; do
        let j+=1;
        mv "$i" "$p/$j.jpg" ;
    done
    Ответ написан
    3 комментария
  • Что есть структура, а что оператор в C?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В стандарте языка используются термины "expression" (например, printf("something\n"), без точки с запятой -- это expression, а именно вызов функции) и "statement" (например if (expression) statement -- это statement), а иногда expression может быть statement'ом (например, printf("something\n");, с точкой с запятой), это называется "expression statement".

    "expression" обычно переводится как "выражение" и не вызывает трудностей. Со "statement" сложнее. Мне нравятся переводы "конструкция" ("конструкция if", "конструкция switch") или "инструкция" ("инструкция goto", "инструкция return").


    Как называть по-человечески строчки:
    if ( a > b )
      printf("something\n");

    Конструкция if с единственной инструкцией-выражением.

    А такое:

    if(condition) {
      printf("something1\n");
      printf("something2\n");
    }

    Конструкция if с составной инструкцией содержащей две инструкции-выражения.
    Ответ написан
    2 комментария
  • Как подключить много ESP8266 к wifi?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть от 30 до 70 esp8266, которые генерируют данные и должны отправлять эти данные на сервер.
    Как это организовать ?

    Сколько устройств -- не очень важно, важнее сколько данных и критична ли их доставка. Если доставка не критична -- можно использовать протокол без установки соединения, какой-ньть UDP, присоединять esp32 как станции к одной точке доступа и просто слать. Если данных существенно меньше, чем пропускная способность сети -- тоже можно не париться, присоединяться к единственной точке доступа и просто их слать. Проблем нужно ожидать если данных много и доставка критична.
    Определитесь с этими двумя параметрами сначала.
    Ответ написан
    2 комментария
  • Почему программа ломается при освобождении памяти?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему программа ломается при освобождении памяти?

    Потому что во время работы кто-то вылез за пределы выделенной памяти и перезаписал служебную информацию в куче. Простейший способ отладить это -- запуском программы под valgrind.
    Но в этом вопросе всё проще:

    char *response = new char[line.size()];
      std::strcpy(response, line.c_str());


    Должно быть char *response = new char[line.size() + 1];
    Ответ написан
    1 комментарий
  • C++ Прояснить что происходит. Как это работает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Весь код считает сколько символов с строке введены пользователем

    Сколько разных символов.

    set<char> c(text.begin(), text.end()); // (std::)set<char> -- это множество (без повторений) символов.
                                           // с -- это имя переменной.
                                           // Конструктор множества с двумя итераторами добавляет во множество
                                           // все объекты между этими итераторами. Т.е. все буквы из строки text.
      int col = c.size();  // про c -- см. выше. std::set::size возвращает размер множества.

    Подробнее про std::set.
    Ответ написан
    Комментировать
  • Как называется это в функциях, классах?

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

    Перегрузка (overloading).
    Ответ написан
    5 комментариев
  • Как заставить wget качать из конвейера?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    curl -s 'https://api.adoptopenjdk.net/v2/latestAssets/releases/openjdk11?openjdk_impl=hotspot&os=linux&arch=x64&release=latest&heap_size=normal&type=jdk' | \
    jq -r '.[0].checksum_link' | xargs wget
    Ответ написан
    Комментировать
  • Как работает scanf в плюсах?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    мне надо в цикле на каждой итерации запрашивать ввод строки.
    cin » s1
    позволяет это сделать, а
    scanf("%255[^\n]", s1)
    только 1 раз.

    А вот такой scanf -- позволяет это сделать сколько угодно раз:
    scanf("%255[^\n]\n", s1);
    А вот такой позволяет ввести строку заранее неизвестной длины:
    char *p;
    scanf("%m[^\n]\n", &p);
    Ответ написан
    Комментировать
  • Как передать указатель на функцию и сохранить в другой указатель на функцию, c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    void (* func())

    Это какая-то ерунда (а именно, функция, возвращающая void *), а не указатель на функцию. Указатель на функцию выглядит так:
    void (*func)()
    Ответ написан
    Комментировать
  • С++. при возвращении массива string::c_str() происходит что-то не понятное?

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

    lol.

    Я в твой код комментариев добавил, для ясности:

    char *  readLine() {
      std::string line = "";
      ...
      std::cout<< (char *)line.c_str()<<"\n"; // Response    - все норм
      return (char *)(line.c_str());
      // в этот момент line уничтожается, и вместе с ним становятся недействительными
      // указатели полученные функцией c_str()
    }

    Возвращай std::string, не мудри.
    Ответ написан
  • Как работают функции sleep?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как работают функции sleep

    Вообще есть два основных подхода -- busy wait (ожидание в цикле) и scheduler-based (с использованием планировщика). Который из них используется зависит от контекста и возможностей окружения: бывают контектсты, в которых планировщик недоступен (например, обработчик аппаратного прерывания в ядре ОС), бывает кооперативная многозадачность, при которой планировщик не может гарантировать, что процесс возобновит выполнение через заданное время, бывают задержки настолько маленькие, что обращение к планировщику не имеет смысла. В этих случаях используют busy wait. При наличии вытесняющей многозадачности и таймеров высокой точности для достаточно длинных задержек можно использовать планировщик. В ядре linux используются оба эти подхода.
    Ответ написан
    Комментировать