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

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Как сделать, чтобы все запускалось, а не просто открывалась VS

    Собрать программу, написанную на С.
    Или переписать ее на Perl.
    JFYI: "Скрипта на С" не существует. С - язык компилируемого типа.
    Ответ написан
    Комментировать
  • В чем разница между указателями в си?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Все просто.
    Попробуйте-как динамически память выделить, используя только mt1 :) (Хинт: не получится нифига. Выделить память через malloc еще можно, используя sizeof struct, а вот присвоить адрес начала области переменной mt1 фиг получится)
    Структуры - офигенное средство для расписывания памяти, особенно при чтении бинарных файлов фиксированной структуры внутри - считал N байт в область, наложил на эту область структуру - и все, можно к полям обращаться. Что, собственно в примере у Вас и делается.
    Ответ написан
    Комментировать
  • Как получить результат функции в main при работе с матрицами?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Программа полностью работает

    Сумнительно.

    Вот так:
    printf("n \n");
        scanf("%d",&n);
        int matrix[n][n];

    делать нельзя. Статический массив строится в момент компиляции, поэтому его размерность должна быть задана - странно, что у Вас компилятор замечания не выдал - или просто проигнорили?

    Выделение памяти нужно делать таким образом:
    int *matrix;
    
    matrix = calloc( n * n, 1);

    после чего matrix - указатель на int и всю программу соответственно нужно переделать под адресную арифметику (подозреваю, что задание было на изучение адресной арифметики :) )

    По-хорошему, результат calloc нужно проверить - выделилась ли память и перед завершением программы сделать
    free(matrix);
    Ответ написан
  • Как создать тип данных строка в си?

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

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Потому что stricmp - это какой-то неведомый зверь.
    Есть стандартная strcmp - она не игнорит регистр и ищет конец строки по '\0', что очень часто приводит к SIGSEGV :)
    Есть strncmp - она тоже не игнорит регистр, но сравнивает не более N символов, что считается более безопасным, если ты забыл '\0' поставить.
    Есть strcasecmp и strncasecmp - полные аналоги, только регистр игнорят.
    Ответ написан
    Комментировать
  • Что делать если не работает библиотека?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Это вопрос из серии "Как пройти в библиотеку?" :)

    Тут до библиотеки дело еще даже и не дошло. Компилятор не нашел на стандартном пути (где он в винде - понятия не имею) заголовочного файла regex.h
    Ответ написан
    Комментировать
  • Почему условие if ( a == a) может не выполняться для Embedded-разработки?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Ну, я бы сказал, что не выполнится (b == b) потому что формат хранения float таков, что точного сравнения провести невозможно. Число с плавающей точкой есть математическая абстракция, для реализации которой в вычислительной технике (которая оперирует конкретными нулями и единицами) применяется ряд допущений ;)
    Ответ написан
    9 комментариев
  • В какой директории хранить файл для считывания из программы?

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

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Потому что нормальный алгоритм работы с мелкими текстовиками следующий:

    открыть файл на чтение (man open - внимание, не потоковый fopen, а простой open!)
    получить размер файла из элемента оглавления каталога (man stat)
    выделить память размером с файл (man calloc)
    прочитать весь файл целиком (man read)
    закрыть файл (man close)
    и после этого парсить полученный буфер как угодно вдоль и поперек, не забывая конечно, что портить его не надо :)

    Ну или вот так наверно понятнее будет:
    #define NUL 0
      #define ERR -1
      int i;
      short int handle;
      struct stat sb;
      char *name="/tmp/testfile.txt";
      char *data;
    
      if ((handle = open(name, O_RDONLY)) < NUL)
        return ERR;
    
      stat(name, &sb);
      data = (char *) сalloc(sb.st_size + 1);
      i = read(handle, data, sb.st_size);
      close(handle);

    На выходе - массив data с данными файла.
    Ищещь перевод строки ('\n') и переставляешь указатель ЗА него (если нужно конвертить число в цифру то после перестановки на место перевода строки пишешь '\0' и используешь atoi() - на выходе длина строки, которая идет в качестве контроля, чтобы на SIGSEGV случайно не выскочить.
    Потом от нового положения указателя цикл по длине строки с поиском по таблице замен.

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

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    У меня другое определение :) - а это я не знаю, откуда Вы такое добыли.
    Ведро 4.14.52, glibc 2.26-r7, Calculate Linux 17
    extern int printf (const char *__restrict __format, ...);


    То же самое - ведро 2.6.32-696, glibc 2.12, CentOS 6.10
    extern int printf (__const char *__restrict __format, ...);


    Локально stdio.h находится там же, где и все - в /usr/include. Исходный код данной функции никогда в программе присутствовать не будет. Вообще. Код stdio() находится в glibc, которая находится соответственно в /lib64 (для 32-битных систем - в /lib). Если очень хочется посмотреть на ее исходник - качайте исходник glibc.
    Ответ написан
  • Стоит ли переходить на С?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Ну, тут положение таково...

    Если планируете когда-либо заниматься UNIX на уровне больше чем "настроить LAMP на локалхосте на убунте, собезьянив действия из манов" - то знать C надо. Знание С - оно все целиком постоянно проходит через админство и в общем-то понятно почему.

    А вот насчет крутости... Язык - это инструмент ;) Язык программирования в том числе :) Он нужен для решения задач. А не наоборот! Если у Вас есть задача и ее надо решать Вам - сами должны выбрать, на каком языке ее реализовать. На С пишется одно, на С++ - другое...
    Ответ написан
    Комментировать
  • Изучение Си подобным образом?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Ну, gdb несомненно знать надо - пригодится и не раз :) Если не нравятся чьи-то чужие примеры - ну придумайте себе свои :)
    Ответ написан
    Комментировать
  • Можно ли написать AAA-игру на языке программирование Си?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Можно.

    Но сложно. Инди-игру наверное еще одолеете, но вот новый FarCry или Overwatch - точно вряд ли. Слишком много великов придется самому сколхозить...

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

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    M. УЭИТ С. ПРАТА Д. МАРТИН Язык Си. Книга отнюдь не новая, а весьма даже старая, но когда-то она здорово мне помогла - собственно все мое умение писать на С началось с нее...
    Ответ написан
    1 комментарий
  • Что за ошибка при компиляции?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Английским по белому - файл cal.h не найден
    Ответ написан
  • Как запустить программу на Си с помощью bcc32.exe если возникает ошибка "Unresolved external..."?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    мама дорогая, кто-то еще пользуется Борманом?

    Правильно понимаете. Линкер не может собрать исполняемый модуль, потому что не знает где найти точки входа в процедуры beginthread и endthread. Спросите гугла, как их добавить (если конечно он это знает. Бормана я использовал последний раз ээээ.... 15 лет назад....)
    Ответ написан
    Комментировать
  • Почему Segmentation fault?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Чего удивительного-то?
    Node* new_node;
    завели указатель на структуру Node. Который указывает в никуда, то есть по случайному адресу, который там будет записан. Нужно вот так:
    Node* new_node = (Node *) calloc((sizeof(Node),1);
    Это сразу и память выделит и проинициализирует ее нулями.
    Ответ написан
    Комментировать
  • Как прочитать конкретные байты из файла используя язык С?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    man open
    man seek
    man read
    man close

    :D
    Ответ написан
    Комментировать
  • Быстродействие за счет ногопоточьности в процессорах с помощью pthread, Cи?

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

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Netbeans, KDevelop (но последний только в линухе и только в KDE)
    Ответ написан