Ответы пользователя по тегу C
  • Нарушение прав доступа при чтении по адресу 0x39383835 как исправить?

    @rPman
    Черт, неужели нельзя переделать код на использование & а не *, в идеале вообще избавиться от malloc и free а организовать код чтобы освобождение было автоматическим, или переместить логику в классы и деструкторы.

    Причина может быть страшнее - где то порушена память heap но узнаете вы об этом когда станет совсем поздно - т.е. в другом кучке кода.
    Ответ написан
  • Почему программа выдает не тот результат, который нужен?

    @rPman
    фиг его знает, есть предположение, в main.c

    setlocale(LC_ALL, "");

    #ifdef PACKAGE_LOCALE_DIR
    bindtextdomain(PACKAGE_NAME, PACKAGE_LOCALE_DIR);
    #else
    #error Please use flag -DPACKAGE_LOCALE_DIR="locale"!
    #endif

    textdomain(PACKAGE_NAME);

    что то из этого выдает в stdout лишний текст путь до локализации, но он закеширован, кеши сбрасываются по завершению программы
    Ответ написан
  • Для чего в Си ввели синтаксис указателя на массив?

    @rPman
    Для начала вопрос зачем в язык ввели понятие массив, а не остались с указателями - потому что типизация это добро. Т.е. на этапе компиляции можно будет понять, првильные ли переменные были переданы в функцию/метод, а так же можно узнать какой именно метод нужно использовать (методы с одинаковыми именами и разными типами параметров, плюс сюда в копилку темплейты С++)

    Соответственно чтобы не передавать весь массив в качестве копии в методы, завели понятие ссылка (она не только к массивам определена, но и к любым объектам)
    Ответ написан
  • Как произвести очистку заголовочного файла C/C++?

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

    Могу предположить что в итоге вам нужен файл с парами 'имя макроса' - значение, я решал это в два этапа, сначала получение списка необходимых дефайнов (в моем случае это решалось в полуавтоматическом режиме, работая с текстовыми файлами в редакторе + регулярные выражения и т.п.), а затем на основе списка этих строк я генерировал cpp код, который выглядел как print ("name =" + name + "\n"); для каждого дефайна, затем полученный код компилировался и запускался - в итоге он выводил мне в нужном мне формате список значений дефайнов.
    Ответ написан
    Комментировать
  • Помощь с программированием на Си

    @rPman
    Учить начиная с Си не советую, начинайте с простого, лучше спускаться вниз с верхов: JavaScript -> Java или C# -> C++ -> C (такая иерархия слишком образная и холиварная, но сойдет).

    В данном случае это поэтапно позволит изучать сначала просто алгоритмы (JavaScript), затем объектно-ориентированный подход (Java или C#), затем к этому добавляется самостоятельный контроль за памятью (C++) а уже после этого вычитаем синтаксический сахар и объектную ориентированность и получаем голый C (дальше только ассемблер и машинные коды).

    При обучении именно Си без понимания более высоких языков программирования поставит в тупик то, как и что в нем реализуют другие программисты, дело в том что в библиотеках очень старательно реализуют вкусности, которые появились позже в более высокоуровневых языках, и делают это ограниченными средствами языка — например на макросах (язык над языком — предпроцессор), и пытаться понять даже самые простые конструкции будет очень сложно.
    Ответ написан
  • как десеариализовать такой json в c#

    @rPman
    Вот примитивный json decoder (даже два), осторожно быдлокод, но хорошо коментированный, писал для того чтобы не таскать с собой тяжелые 'правильные' проекты json (плюс не требует новых версий .net, Будет работать чуть ли не с 1.1, в т.ч. mono), требует допиливания обработки ошибок синтакса и т.п. (читать todo: в коментарих).
    pastebin.com/5jJsVs39

    Первый метод SimpleJSON::pairsParseJSON(string) — возвращает одноуровневый Dictionary<string, string>, каждая запись — элементы-листья в дереве json, ключи — составное имя элементов, разделенное точкой (массивы именуются через '[индекс]'), например:
    {test:[{a:1,b:'asd'},123]}

    выдаст массив:
    «test[0].a» => «1»
    «test[0].b» => «asd»
    «test[1]» => «123»
    p.s. этот метод очень удобен при работе со сложными структурами json без массивов

    Второй метод SimpleJSON::treeParseJSON(string) — вернет классический многоуровневый словарь Dictionary<string, object>, где в качестве object может быть либо строка, либо число, либо другой словарь.
    Ответ написан
    Комментировать
  • Ваши мнения про C#(.NET) и Java в целом и по отдельности

    @rPman
    Опыт программирования на java вам подойдет в гораздо большем количестве мест, чем знание c# (и точнее .net framework, так как обычно говоря c# подразумевают сразу и язык, и среду разработки и библиотеки от майкрософта).

    Как я зык, java — это и веб, и все mobile (как старое так и новое — android), и desktop, и игры и самое главное — кроссплатформенность.

    В минусах — грустная политика oracle, владельца java как технологии так и пула патентов. И как результат, смутное далекое будуще. Но c# 'держит за горло' еще более худший монстр — microsoft…
    Ответ написан
    3 комментария