• Alias в сценариях linux?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Алиасы работают только в интерактивном режиме шелла.

    При запуске в скриптах они работать не будут.
    Если вам нужно, пользуйтесь функциями - они могут и алиас заменить и в скриптах будут работать
    Ответ написан
    Комментировать
  • Alias в сценариях linux?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Вчера или позавчера я уже отвечал на аналогичный вопрос несколькими постами ниже:
    Почему не подгружаются alias не из под рута?
    Там же ссылка на статью, где всё разжёвано...

    Это потому, что это только для выполнения текущего, в данный момент заданного.
    После перегруза, всё слетает.

    А чтобы добавилось (см. мой ответ и статью), надо сделать так:
    echo -e "alias ll='ls -l'" >> ~/.bashrc
    а потом, чтобы не перезагружать систему и изменения вступили в силу, обязательно:
    . ~/.bashrc
    Пробуем запустить сценарий.
    Всё должно работать...
    Ответ написан
    6 комментариев
  • Имена массивов в си?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Начнем с устранения ваших проблем в терминах, так как из него следует ваше непонимание ситуации. А также с устранения методических проблем.

    Главный источник информации о языке - стандарт языка. Не книжки Страуструпа, Майерса, не то, что показывает CLion, IntelliSense и их друзья, а стандарт языка. Не следует делать выводов о работе и устройстве языка из этих источников.

    Далее, нет такоего термина "имя массива в C". Есть термин "переменная типа массив". Если вы написали:
    int ints[2];
    - это у вас массив на стеке. ints при этом имеет семантику указателя, который всегда и гарантированно указывает на 0 элемент в массиве. Понятно, что коль скоро это указатель на стек, записать туда другой указатель (ints=somePointer) нельзя - потому что нигде в программе, на самом деле, этот указатель не хранится - он вычисляется и подставляется компилятором на ходу.

    Из этого не следует(!), что переменная типа "массив" не имеет семантики указателя.
    Ответ написан
    7 комментариев
  • Стек и куча (память)?

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

    Действительно, почему бы и нет, учитывая, что эта настройка в руках программиста собирающего (на венде, см. cl /F) или запускающего (в *nix, см. ulimit -s) программу?

    Стек работает быстрее

    А что, уже научились освобождать выделенную на стеке память в произвольном порядке?
    Ответ написан
    Комментировать
  • Стек и куча (память)?

    Griboks
    @Griboks
    Вы можете выделить столько память, сколько требуется, однако следует учитывать, что:
    1. чем больше стек, тем он медленнее
    2. 99% программ не используют даже маленький стек полностью
    3. хранить большие переменные на стеке неэффективно
    Ответ написан
  • Поведение указателей в Cи?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Это присваивание адреса первого байта массива {0, 0, 0, 0} указателю float?

    Нет. Так можно было бы инициализировать массив. Но если так инициализировать указатель, то это присваивание самому указателю значения 0.

    что будет в i, после данных действий?

    сегфолт при попытке разыменования указателя.

    Начиная с с99 можно сделать так:
    float* arr = (float []){0, 0, 0, 0};
    и это означает создание в текущем контексте (на стеке, если эта строчка внутри функции, или в глобальных данных, если вне) массива из 4 элементов типа флоат, инициализация их нулями и присваивание указателю arr адреса этого массива.
    В этом случае int i = *((int*)arr); проинтерпретирует память первого элемента массива как целое число и присвоит его значение i. По стандарту ieee754 нулевое значение типа float представляется в памяти как 4 нулевых байта, соответственно в i будет записан 0.
    Ответ написан
    6 комментариев
  • PGP шифрование?

    @rPman
    Если третья сторона однократно получила как то доступ к приватному ключу, то в последующие разы ввод секретной фразы им естественно не понадобится.

    Секретная/парольная фраза требуется только для того чтобы хранить зашифрованным приватный ключ локально.
    Ответ написан
    2 комментария
  • PGP шифрование?

    @CHolfield
    нет
    Ответ написан
    Комментировать
  • Массивы char в c++?

    GavriKos
    @GavriKos
    Нельзя создавать массивы заранее неизвестной длины таким образом. У вас n должно быть константой. Либо используйте динамические массивы, а еще лучше - контейнеры из std
    Ответ написан
    1 комментарий
  • Факторизация числа?

    longclaps
    @longclaps
    Ошибка целочисленного переполнения.
    55999*76699 == 0x1000186a5  // 33 бита
    100005      ==     0x186a5
    Ответ написан
    Комментировать
  • Факторизация числа?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А это у вас вообще не факторизация.
    Факторизация - это разложение на простые множители.
    Ответ написан
    Комментировать
  • Факторизация числа?

    Итого, из остальных двух ответов:
    1) пользоваться типом long long (или unsigned long long, если заранее известно, что числа положительные)
    2) пробежаться по всем числам от 1 до n, запомнить все простые в список
    3) найти все сочетания по 2 с повторами из списка, дающие при умножении n
    Ответ написан
    1 комментарий
  • Факторизация числа?

    BacCM
    @BacCM
    C++ почти с рождения
    4) проверять что максимальное значение используемого типа достаточно для хранения произведения.
    5) возможно лучше делить n на простые числа, нежели умножать их между собой - переполнения не будет
    Ответ написан
    2 комментария
  • Факторизация числа?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    Немного оффтоп. Для каждого фиксированного i не надо перебирать все j, в поисках того, где i*j=n. Достаточно проверить, что n делится на i без остатка: if (n%i == 0). Тогда j = n/i. Не будет никакого переполнения, которое, как вам longclaps уже ответил(а) привеодит к неверным результатам.

    Еще вариант - можно гнать оба цикла до ceil(sqrt(n)). И выводить сразу 2 пары (i,j) и (j,i), если i!=j. потому что из двух множителей хотя бы один не больше корня n, иначе бы перемножение было бы больше n. И еще отдельно надо вывести варианты (1, n) И (n, 1).
    Ответ написан
    Комментировать
  • Размер массива в C++?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Code 11 - segmentation fault.
    Массив s заводится в стеке, размер стека ограничен.
    Ответ написан
    2 комментария
  • Битовое представление чисел в c++?

    0xD34F
    @0xD34F
    Делаете две битовые маски - все единицы для младших разрядов (до вырезаемого бита), все единицы для старших (после вырезаемого бита). Применяете обе маски к числу, смещаете старшие разряды на единицу вправо, объединяете получившиеся числа:

    int value = // ваше число, чему-то там равно, вам виднее
    
    int bit = // номер вырезаемого бита, тоже вам виднее
    
    int maskLower = 0;
    for (int i = 0; i < bit - 1; i++) {
      maskLower |= 1 << i;
    }
    int maskUpper = ~maskLower;
    
    value = ((value >> 1) & maskUpper) | (value & maskLower);


    UPD. Цикл для создания маски конечно лишний, как справедливо заметил в комментариях res2001.
    Ответ написан
    2 комментария
  • Ошибка оператора условия if в c++?

    @laphroaig
    Я предполагаю нужно так:
    if (  (hours>=9 && hours <= 17) && (min >=0 && min <= 59) )
    Ответ написан
    3 комментария
  • Ошибка оператора условия if в c++?

    JaxxDexx
    @JaxxDexx
    if (9 <= hours <= 17 & 0 <= min <= 59)

    Объясню подробно почему это не работает.
    Допустим hours = 27, а min = 90, тогда
    if (9 <= 27 <= 17 & 0 <=  90 <= 59) тогда
    if (true <= 17 & true <= 59), тогда т.к. true = 1  
    if (1 <= 17 & 1 <= 59) тогда 
    if (true & true) => if (1 & 1)
    в результате побитового сложения получаем if (1) => true => тело блока выполнится


    Второй пример
    Допустим hours = 1, а min = -1, тогда
    if (9 <= 1 <= 17 & 0 <=  -1 <= 59) тогда 
    if (false <= 17 & false <= 59) тогда 
    if (0 <= 17 & 0 <= 59) тогда 
    if (true & true) тогда 
    if (1 & 1)
    if (1)
    true


    Т.е. какие бы значения вы не подставляли, блок выполнится всегда
    Ответ написан
    2 комментария
  • Удаления ключа шифрования?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    Видимо следует немного почитать про криптологию, чтобы понять что такое ключ шифрования, и почему его нельзя удалить.

    Почитайте для начала https://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BC%D...
    Ответ написан
    Комментировать
  • Присваивание в python?

    sim3x
    @sim3x
    Перед открытием спойлера, попробуйте найти ошибку самостоятельно
    Не смешивате кириллицу и латиницу в коде
    Ответ написан
    Комментировать