Ответы пользователя по тегу C
  • Как создать указатель на вводимый текст?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Заводим переменную типа char *
    Берем в нее память килобайт 10, зануляем
    Считали текст, сдвинули указатель, запомнили
    (повторять, пока есть текст)
    По завершению - массив текста и массив указателей, указывающих на начало каждой строки
    Ответ написан
    Комментировать
  • Почему происходит сегфолт?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Сразу видно, что код - копипаста :) Берете в зубы gdb и - по операторам шагать, выясняя, что и как делается, заодно и в коде разберетесь, чтобы на защите не краснеть :)
    Ответ написан
    Комментировать
  • Почему программа вообще заходит в цикл и почему тут же завершается при присваивании?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Потому что в num мусор. Она обьявлена на куче и в ней может быть любое произвольное значение, нуль может быть, а может быть и нет. Если ломает сделать отдельную инициализацию, смените цикл на for
    Ответ написан
    Комментировать
  • Как учить C++ если будешь знать С?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    С начала. Там все по-другому. Подход другой, принципиально. Синтаксис и некоторые ключевые слова общие, да. Но на этом все. Это примерно как самосвал и паркетник - оба автомобили, но один для перевозки грузов, а второй - для перевозки телок :)
    Ответ написан
    Комментировать
  • Как работать с указателями?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    А, простите, чего хотели-то? Передали в функцию два указателя, поменяли первый со вторым, ничего с данными по указанным адресам не сделали - ничего и не поменялось :)

    Указатель содержит адрес. Чтобы поменять данные - нужно считать данные по адресу.
    Ответ написан
    Комментировать
  • Как сделать ввод/вывод текста в ядре на С?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Найти исходники доса, напрмер, если ось будет однозадачная. Или minix какого-нибудь - если с закосом под линуха.
    Ответ написан
  • Выдает то signal: illegal instruction core dumped то stack smashing detected terminated. Как исправить?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Хорошо, что компиляторы не имеют души :) и не могут сказать "О великий компьютерый бог, что тут меня заставляют делать!" :)

    Этот код - по-моему одна большая сплошная нелепость. Давайте начнем с постановки задачи, да? Как было сформировано условие?

    Ну и сразу что бросается в глаза:
    char firstFraction[2];
      char secondFraction[2];

    Во-первых.
    Чего так мало места? В такой прости-Господи массив поместится ровно один символ (потому что второй займет '\0')
    Во-вторых.
    Почему вообще char? Понятие указателя не одолели, что ли? Вы там какую то арифметику делать будете - какого фига не вводить сразу int? Если стоит условие ввода в char - я не вижу atoi()
    scanf("%s", firstFraction);
    Продолжение предыдущего вопроса - почему ввод строковый, хотя предполагается арифметика? Зачем лишний раз конвертить из строки в число? Или Вы полагаете, что С, как многие модно-стильно-молодежные языки - сам определит тип переменной в зависимости от операции? Так вот, черта с два. С - язык старой школы, он требователен и к программе и к программисту. Никакой автотипизации, никакой сборки мусора - все на совести программиста.

    Пишите условие задачи, а там посмотрим.
    Ответ написан
  • Библиотека Cron scheduler на windows для си?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    В винде - есть Планировщик заданий. Крона там нет и быть не может.
    Ответ написан
    Комментировать
  • Зачем освобождать память в C?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Потому что это называется "утечка памяти", когда программа выделяет ее, но не освобождает. Если это мелкая программа, то похрен - программа кончилась, вся ее память освободилась. Но тут нарабатывается плохая привычка и в итоге мы получаем что-то типа Firefox, который жрет память тоннами и не освобождает. А когда в системе кончается реальная память - начинает работать менеджер страничного обмена (свопа), который вытесняет неиспользуемые страницы на диск - это во-первых жрет ресурсы, во-вторых диск бестолково гоняет. А когда кончается и страничная память (обьем свопа) - система тупо встанет.
    Ответ написан
    Комментировать
  • Как инициализировать массив?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Ну, начать на до с того, что вот так:
    int len;
        printf("Print array's length: ");
        scanf("%d", &len);
        char str[len];

    массивы не обявляют. Потому что у Вас написана чушь. В строке
    char str[len];
    записана инструкция компилятору - выделить массив именем str и длиной из переменной len. Но в момент компиляции значение переменной len - неизвестно. Оно может быть нулем, мусором, каким угодно числом. Вам - либо задавать массив фиксированной длины, либо брать память динамически через malloc()/calloc() (лучше последний - он сразу память нулями забьет)
    Ответ написан
  • Указатели в языке Си?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Вмешалась ОС? Но если так, то почему?

    Потому что классическая ошибка - использование неинициализированного указателя. Ты обьявил a указателем на целое, но не присвоил ему никакого значения (через malloc(), calloc() или функции, возвращающие указатель). Обьявленная переменная была выделена в куче и получила какое-то мусорное значение, доступное твоей программе (вполне может быть указатель на часть кода, например, на ядро, на общие функции). Ты его прочитал.
    При попытке записать по данному адресу поймал SIGSEGV, потому что данный адрес твоей программе по записи недоступен. Все, как должно быть.
    могу ли я указателю дать ссылку на конкретную ячейку в памяти?

    Теоретически можешь, но практически ось тебе сразу выдаст SIGSEGV, потому что писать ты можешь только в те области памяти, которые тебе доступны по записи.
    warning: initialization of 'int *' from 'int' makes pointer from integer without a cast

    Ну правильно говорит - инициализация делается без приведения типа. Такой финт ушами часто делают со строками - по умолчанию выставляя там указатель на NULL (что обычно означает, что строке еще не выделялась память), напрмер
    char *str = (char *) NULL;
    Ответ написан
    Комментировать
  • Что означает -'0' на C?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Это символьная константа - текстовый символ цифры "ноль". Компилятор сам переведет в число, а записывать так проще и быстрее - я вот не помню код цифры "ноль".
    Ответ написан
    Комментировать
  • Как записать значение в файл и зашифровать его на языке C?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Существует масса различных библиотек с API шифрования, да и простяцкие подстановочные шифры никто не отменял. Ну или вообще топорный вариант - число в текст, записать base64 текста
    Ответ написан
    Комментировать
  • Почему размер int такой?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Так много, друг Горацио, на свете, что и не снилось нашим мудрецам...

    С работает на разных платформах и даже на разных архитектурах. И размер int в этих платформах и архитектурах - он - внезапно - разный!

    А работает ли там модно-стильно-молодежный Rust - я не знаю :) Я уже столько этих "убийц С" перевидал :)
    Ответ написан
  • Как в языке си вернуть пустой массив?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    А что непонятно-то?

    ЕСЛИ
    по данному адресу лежит '\0'
    ИЛИ
    данный адрес равен NULL
    ТО
    вернуть пустой массив (обьект памяти, указывающий на '\0' либо указатель на данный обьект)

    Все :) В языке С нет отдельного понятия "массив", в нем все - обьекты памяти, а уж как интерпретировать результат, который тебе приехал - это твое дело. Посчитаешь массивом - будет массив, посчитаешь структурой - будет структура :) Посчитаешь массивом структур - будет массив структур :D
    Ответ написан
  • Где можно узнать как расшифровываются эти "руны"?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Это не "команды", а функции. А узнать про любую функцию очень просто - man atoi например. Правда, не все функции есть везде. Например itoa стандартной функцией не считается, и частенько приходится колхозить ее замены :)
    Ответ написан
    Комментировать
  • Как переписать код с с++ на с(си)?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Обычно я такими вещами не занимаюсь... но... жалко девочку, пример скачала, но он на плюсах, а злой препод требует plain C (а еще может потребовать обьяснить, как оно работает! :DDD)
    (JFYI, Инна - я бы только за форматирование пару поставил - читать это невозможно от слова совсем)

    #include <iostream>
    меняем на
    #include <stdio.h>
    using namespace std;
    нафиг.

    Цикл вывода, где потоковый оператор cout, переписать следующим образом:
    for ( j = 0 ; j < W ; j++)
      printf("%d ", matrix[i][j]);  
    putchar('\n');


    И настоятельно рекомендую, прежде чем идти лабу сдавать - почитать или посмотреть в отладчике, как это работает. Потому что чайник срезается одним вопросом.
    Ответ написан
    3 комментария
  • Обмен данными поверх ethernet(mac2mac), как реализовать?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    API? На C? На уровне пакетов ethernet? Ну, какие-то либы наверняка найдутся, позволяющие формировать пакеты, но я бы на месте твоего препода добавил условие "и без использования библиотек".
    Берется RFC, читается, формируется пакет вручную и вручную же отправляется в сетевой стек на нужном уровне.
    Ответ написан
    2 комментария
  • Как копировать список в си (C)?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Брутально? Подсчитать размер области памяти, которую занимает список, выделить еще один такой же кусок и скопировать туда через memmove(), потом заадресоваться по новому адресу.
    Но Вам так не пойдет, у Вас же учебный пример.
    Ответ написан
  • Как занести в char int?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    char *p - это указатель на строку. В него можно занести только указатель. Обьясни точнее и грамотнее - что нужно.

    Если нужно поместить в строку (предположим ты не забыл выделить память) текстовое отображение числа - то это sprintf()
    Если нужно поместить само число (которое НЕ будет отображаться текстом, ессно) - это memmove()
    Ответ написан
    Комментировать