Задать вопрос
  • Как вывести результат сложения в Nasm (MACOS, 64bit)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как сделать так, чтобы оно выводило число?

    Перевести число в строковую форму и эту строковую форму выводить. Системный вызов write выводит байты как есть.
    "как"? -- например, в цикле беря остаток от деления на 10 (или какое ты хочешь основание системы счисления), прибавляя к остатку '0' (или 'a' - 10, если он 10 или больше) и записывая результат в буфер, начиная с конца. Типа того:
    mov rbx, 10
        mov rsi, str + 20
    l1:
        mov rdx, 0
        idiv rbx
        add dl, '0'
        mov byte [rsi], dl
        add rsi, -1
        test rax, rax
        jnz l1
    ; rsi + 1 указывает на начало строки
    ; длина строки -- str + 20 - rsi
    Ответ написан
    Комментировать
  • Как определить время выполнения адресации?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Задача в такой постановке не имеет решения и скорее всего не имеет смысла.
    Попробуй для начала ответить, время чего именно ты хочешь замерить.
    Я подозреваю, что ты хочешь сравнить скорость выполнения конкретной программы написанной с использованием того или иного метода адресации. Если это так, то это понятная задача, но не стоит называть её "определением времени выполнения адресации". Для её решения можно воспользоваться счётчиком тактов если он есть в твоём процессоре. Если нет -- можно воспользоваться внешним таймером.
    Ответ написан
    6 комментариев
  • Как разобраться в конструкторах класса и инициализации переменных в ней, в чем различие?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ли какая-то разница?

    Разница в том, что инициализация bool full = false; выполняется для любого конструктора, у которого поле full не перечислено в списке инициализации.
    Конечное состояние конструируемого объекта одинаково в обоих случаях.

    И почему так конструктор не работает:

    Потому что у класса Token отсутствует конструктор по умолчанию.
    Ответ написан
    5 комментариев
  • Как сделать корректный вывод измененной регуляркой строки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В вывод попадают просто звездочки, она должна менять на звезды ссыкли типа www.expamp.com, http(s)://example.com, и email ы.

    Ну так а что? Первые два класса эта регулярка меняет, в e-mail адресах последняя .+$ матчит строку до конца. Как написано -- так и работает.
    Ответ написан
    Комментировать
  • База Данных на СИ. Почему не компилирует далее?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    scanf_s("%[^/n]s", b.book_name);
    printf_s("Enter the price and quantity\n"); // Не появляется далее это.

    Не появляется, потому что у тебя в предыдущей строке ерунда написана.
    Ответ написан
  • Как исправить передачу массива в поток?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int *array = new int[mSize];
    ...
    HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)a,&array,0,&tid);
    ...
    int a(int *array)

    В вызове CreateThread надо заменить &array на array, потому что переменная array -- не массив, а указатель.
    Ответ написан
    1 комментарий
  • Как правильно обращаться с массивом строк в си,си++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    char *grps[] = {""};
    Но получается так, что в grps храниться только первая gr, а последующие не записываются.

    Ты понимаешь, что у тебя в массиве grps -- один единственный элемент, и запись всех элементов после первого происходит мимо этого массива, куда-то на стек, портя другие данные?

    grps[k] = new char[8];
    ...
    String^ st = gcnew String("");

    А если твой вопрос не про С, то поправь теги.
    Ответ написан
    6 комментариев
  • На правильном ли я пути к удалению ненужных функций из памяти во время выполнения кода?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    первый вопрос: можно и нужно ли после этого вызывать delete, чтобы передать очищенную память в пользование ОС?

    Если ты заглянешь в стандарт С++, в место определяющее оператор delete, то увидишь, что его можно вызывать только для памяти выделенной new. Поскольку память под код функций ты не выделял через new, то и delete вызывать нельзя.

    Что будет, если создать что-то вроде продвинутого singleton, который будет динамически выделять память для класса при запуске, а после выполнения функций можно будет вызвать функцию, которая просто сотрёт класс и отпустит память?

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

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

    Обычно это устроено так, что поля идут одно за другим в памяти. Но кроме размера у полей есть выравнивание. Например, uint32_t выравнивается на 4 байта, а uint64_t -- на 8. Поэтому между идущими подряд полями разного типа могут быть дырки.
    В приведённом примере double -- поле с наибольшим выравниванием, выравнивание объекта будет на 8, поле c будет по смещению 0 в объекте, поле d -- по смещению 8, а поле i -- по смещению 16. Если иметь это в виду, то игры с указателями приобретают смысл.

    Текст задания: все поля этого класса закрытые, ваша задача реализовать несколько функций, которые дают полный доступ к этим полям (см. шаблон кода), несмотря на то, что они закрытые.

    Пожалуйста, никогда так не делай.
    Ответ написан
    Комментировать
  • Как определить, что пойдет за mpls header в pcap пакете?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я смотрел и RFC, и IANA - везде расшифровываются только 0-15 значения для lable. При том, что label принимает значения от 0 до 1048575. И у меня в wireshark попадаются значения явно больше 15.

    Стоит прочитать описание MPLS, чтобы понять, что метки назначаются маршрутизаторами динамически, а 0-15 -- это зарезервированные значения.

    Так вот как определить, что считать после MPLS Header?

    Нет такой задачи. Если ты -- LSR, то ты принимаешь решение о маршрутизации на основании метки и информации полученной ранее от других маршрутизаторов через LDP.
    Ответ написан
  • Как узнать адрес сети для BGP протокола?

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

    Посмотреть в RFC, понять, как связаны поля NLRI и атрибуты NEXT_HOP в сообщении UPDATE.
    Ответ написан
    3 комментария
  • Как отличить tcp segment data от остальных данных в pcap пакете?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как можно отличить tcp segment data от bgp протокола,

    BGP передаётся внутри TCP соединения. Поэтому все данные проходящие по соединению -- это BGP. Но поскольку это TCP и данные передаются сегментами, размер которых не связан со структурой данных, в TCP сегментах могут быть как целые сообщения BGP, так и части. На картинке видны два сообщения BGP: одно целое, общей длиной 0xa1, с 0x17c по 0x21с, и начало следующего, общей длиной 0xa0, с 0x21d и до конца TCP-сегмента. В следующем TCP-сегменте, соответственно, будет продолжение этого сообщения.

    как узнать длину

    Посмотреть в определение протокола, увидеть поля marker и length, использовать их?
    Ответ написан
  • Как вывести массив данных?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как вывести массив данных?

    Перевести каждое число в строковое представление и вывести строки на экран.

    Есть код, который пока что только складывает

    А если посмотреть внимательно, то не только складывает, но и что-то переводит и что-то печатает.
    Ответ написан
  • Можно ли сделать коммит между старыми двумя коммитами?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    могу я впихнуть например коммит D между коммитами А и B? чтобы получилось так:

    Можешь, с помощью git rebase. Сложность впихивания напрямую зависит от того, насколько много общих строчек изменяют D, B и C. Если они полностью независимы, git rebase сделает всё сам, если нет -- прийдётся разрешать конфликты.
    Ответ написан
    Комментировать
  • Задачка на фортране, где тут мб ошибка?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    s=0
        p=1
        do i=1, n
            p=p*((x**(2*i+1))/(4*(i**2)-1))
            s=s+p
        end do

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как добавить мнимую единицу?

    complex_t I = {0., 1.};
    Ответ написан
    Комментировать
  • Как найти часто встречающиеся тексте последовательности?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    С помощью чего можно решить эту задачу?

    С помощью массива std::hashmap<std::string, size_t>, по одному для последовательности каждой длины?
    Ответ написан
    3 комментария
  • Не работает вложенный цикл на bash. Почему?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    set -f; IFS=";"; arr=${site[$key]}

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем проблема?

    В том, что данные читаемые scanf -- это поток. Если формат (в вашем случае %f) не может извлечь данные из потока, они остаются там.
    Чтобы сбросить данные которые невозможно прочитать можно использовать scanf("%*[^\n]");:
    while (scanf("%f", &firstNum) == 0) {
          printf("Enter a NUMBER: ");
          scanf("%*[^\n]");
      }


    Эта конструкция читает текущую строку до символа конца строки в пустоту.
    Ответ написан
    Комментировать
  • Как изменять память процесса?

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

    Значит ты нашёл неправильный адрес. Try something else!
    Ответ написан
    3 комментария