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

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Ну, поехали.
    int *ptr0, *ptr1;
    Обьявили два указателя на int. Поскольку переменные на куче, там может быть все, что угодно.
    printf("%d %d\n",ptr0,ptr1);
    Указатели так не печатают. Ты получишь бессмысленное число, которое не использовать нигде. Обычно указатели печатают так:
    printf("%0X %0X\n", ptr0, ptr1);
    *ptr0= 21;
    Дальше этого оператора программа работать не будет - в этом месте в 99% возникнет прерывание защиты памяти - то есть попытка обращения к области памяти, которая не принадлежит программе. При этом как правило возникает SIGSEGV и все. Если программа выполняется в однозадачной среде, где нет защиты памяти - такой оператор приведет к зависанию, поскольку в нижних адресах обычно расположены системные таблицы.
    Ответ написан
    Комментировать
  • Как следать процерку на ввод целых чисел?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Ну, наверное проверить, что передаваемая строка содержит только цифры. И не забыть, что long integer имеет хоть большую, но конечную длину, соответственно ввод нужно проверять на длину - иначе первый же какер-недоучка попробует вас на зуб переполнением ввода.

    long integer

    man strtol
    man strtoul
    Ответ написан
    Комментировать
  • Почему make file компилятора выдает ошибку, что функция переопределяется?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Да, в общем-то русским (английским) по черному написано - data_process.c включает data_process.h, который первым определил функцию normalization().
    А потом сам data_process.c определил функцию normalization() чуть пониже - ессно компилятор выдает замечание о переопределении, ибо оно есть :)
    Ответ написан
    Комментировать
  • Контринтуитивный синтаксис объявления нескольких переменных одного типа?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Никогда не задумывался, потому что сколько на С пишу - всегда пишуchar *aaam, bbbm;
    и мне так сразу понятно, что первая переменная у меня - указатель, а вторая - нет.
    Ответ написан
    Комментировать
  • Скомпилированный в GCC exe файл вылетает досрочно?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Отключи оптимизацию при сборке ключом -O0. В режиме оптимизации GCC вполне способен сам скрячить undefined behavior оптимизацией "неправильно" расположенных переменных, например.
    Ответ написан
  • Как сделать ввод через стандартный поток (stdin) и через файл?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    По количеству аргументов, вестимо. Если аргументов не передали - значит читаем stdin
    Ответ написан
    Комментировать
  • В чем разница записи массива через указатели?

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

    Нет.
    *(current-1) // Взять значение по адресу current - 1
    (*current-1) // Взять значение пo адресу current и вычесть из него (значения) 1
    Ответ написан
    Комментировать
  • С чего начать изучение C, стоит ли это делать?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Уэйт Прата Мартин Язык С

    Книга конечно совсем не новая, ну так и язык С - тоже не новичок, уже несколько поколений своих "убийц" пережил :)
    Ответ написан
  • Как исправить ошибку Е0028 Выражение должно иметь константное значение на С?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Не хочет принимать n в качестве значение глубины массива. В С компилятор не умеет в такие штуки - придется явно выделять память:
    void ft_print_combn(int n)
    {
        int *x;
    
        x = calloc(n, sizeof(int));
        create_while(x, 0, n);
        free(x);
    }
    Ответ написан
    Комментировать
  • Верно ли я понял процесс преобразование целого типа данных в символьный на C?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Нет. Никакого преобразования типов не произошло.
    int x = 42;
    Присвоили переменной х типа int (как правило четырехбайтовой, знаковой) значение 42;
    x /= 10;
    Поделили нацело на 10, получили 4
    x += '0';
    Прибавили к x 48 (код символа '0'). Где тут преобразование типа? Равным образом могло стоять 'A', 'Z', '+' и т.д. Компилятор просто решил, что Вам так удобнее записать свою мысль.
    Ответ написан
    Комментировать
  • Получение значения указателя в структуре которая является указателем?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Структура не может быть указателем. Но можно иметь указатель на структуру и это постоянно используется. Посмотри пример от Wataru - там есть все, что надо. Ты конечно мусор считаешь, потому что структура создалась на куче, но мусор - тоже данные :)
    Ответ написан
  • C выдаёт ошибку при попытке сравнить 2 int?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Явно ошибка работы с памятью, вангую неинициализированный указатель или недостаточно выделенное место.
    Ответ написан
    Комментировать
  • Можно ли запустить программу на языке C в операционной системе FreeDOS или MSDOS?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Да не вопрос. Но нужна среда разработки для DOS. Borland C, Watcom C. Я предпочитал борланд, в нем есть прикольный отладчик.

    Написав программу, удивишься копеечности ее размеров :)
    Ответ написан
    Комментировать
  • Как присвоить динамическому массиву типа void* значение в Си?

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

    Если нужно заполнить его фиксированным значением - есть memset()
    Если нужно заполнить нулями - обычное дело перед тем, как начать работу со строками - есть calloc()
    Если нужно расписать его структурным типом - ну определи структуру, потом приведи массив к типу структуры и циклом пробегись
    Ответ написан
    Комментировать
  • На каком языке пишут программы для электронного блока управления газоболонного оборудования?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Скорее всего на асме, но возможно и на других языках, см. ответ freeExec
    Ответ написан
    Комментировать
  • По какой книге учить С?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Уэйт, Прата, Мартин "Язык С"

    Книгу можно найти в электронном виде очень много где, ей прилично так лет будет. Но язык с тех пор не поменялся ни разу.
    Ответ написан
    Комментировать
  • Как в языке СИ проверить существует ли файл без создания нового?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Если разово - то man opendir(), man closedir() - просто чтение каталога в том месте, где должен быть файл. Можно по-топорному - через system выплюнуть команду "ls | grep blabla.txt". Можно попробовать открыть файл - man open(), если файла нет - будет ошибка, если успешно - он есть.
    Ответ написан
    Комментировать
  • Значение переменной в двойных кавычках?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    gcc test.c -o test
    test.c: In function ‘main’:
    test.c:3:13: warning: initialization of ‘int’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
        3 |     int x = "15";
          |             ^~~~


    то есть сначала компилер обьявляет строковую константу "15" (два символа - 0x31 и 0x35), потом присваивает адрес этой константы в переменную и обнаруживает, что переменная типа int и соответственно нормальное присваивание невозможно.
    Ответ написан
    Комментировать
  • Как создать кастомное кроссплатформенное окно на си?

    CityCat4
    @CityCat4
    Внимание! Изменился адрес почты!
    Можно ли обойтись без использования WinAPI?

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

    Здесь нужно различать два случая:
    - хочу написать кроссплатформенное приложение, пофиг на чем
    В этом случае берут Qt, Gtk иже с ними и пишут. Там уже обеспечили кроссплатформенность

    - хочу написать кроссплатформенное приложение без сторонних библиотек
    В этом случае придется изучать механизмы отрисовки окон (и скорее всего опять-таки лабать под каждую платформу свой код)
    Ответ написан
    Комментировать
  • Кроссплатформенное программирование на C?

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

    Смелое и голословное утверждение.

    На С никто не пишет кроссплатформенных приложений. На С никто не пишет гуев - это сложно и никому не нужно. Гуи пишут на С++
    Ответ написан
    4 комментария