Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Itoa си реализация

itoa () C реализация int min underflow

Я запускаю некоторые тестовые случаи против моей функции itoa (), но продолжаю получать

Я делаю проверку, но это то, что я пропустил здесь, что это?

7 ответов

не делать то, что вы думаете. C не имеет отрицательных целочисленных констант. Это беззнаковая константа int со значением 2^31, к которой применяется унарный оператор минус. Это означает, что выражение x == -21. будет зависеть от стандарта C компилятор использует.

если вы используете C99 или C11, вы будете в порядке. Существует подписанный тип, который достаточно большой-long long гарантированно будет достаточно большим для этого числа, поэтому как x, так и -21. будет преобразован в long long, а затем сравнивается. Но если вы используете компилятор C89, и у вашей машины недостаточно длинный тип, вы нажимаете поведение, определяемое реализацией:

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

вот почему люди говорят, чтобы использовать пределы.h. Не потому, что они педантичны, а потому, что это опасная территория. Если присмотреться, какие пределы.h содержит, вы, скорее всего, найдете такую строку:

Это выражение на самом деле имеет правильный тип и значение.

кроме того, я не вижу никаких ошибок в коде вас в курсе. Если это не проблема ft_intlen или ft_strdup ошибаетесь. Или вы вызываете свою функцию при тестировании неправильно (те же проблемы применяются к -21. когда вызов тестов).

статус: RESOLVED недопустимый

в любом случае, я улучшил некоторые моменты.

  • sizeof(char) всегда 1, нет необходимости в этом.
  • не бросайте malloc
  • если вы обрабатываете специальный случай 0, то просто обработайте его за один раз.
  • -2147483648 очень очень плохо. Вот что!—6—> для.
  • return не является функцией, не возвращайте (value) , просто вернуться value .
  • не s[len — 1] все время, лучше декременты len перед входом в цикл. Или, так как вам нужно len + 1 только в malloc звонок, просто len as intlen возвращает его и называют malloc используя len + 1

ft_itoa.c

main.c

результат

вам не нужен чек. Вместо этого преобразуйте его в unsigned , что будет соответствовать абсолютному значению :

обратите внимание, что это использует новый size_t ft_uintlen(unsigned) функция, которая работает на unsigned аргументов.

вероятно, проблема в вашем механизме предотвращения переполнения. Вы пытаетесь назначить x типа int to n С типом long int . Но спецификация не гарантирует этот тип long int смогите отрегулировать ряд значения большой после этого int . Более подробную информацию можно найти » Long Vs. Int».

использовать long long int тип n если ваш компилятор поддерживает его. Обновите свой

потенциальные сбои кода, в порядке подозрения:

  1. ft_strdup() поскольку этот код вызывается с «int min value» и возникает ошибка.
  2. прототипы, отсутствующие для различных функций. Особенно ft_strdup()/strdup() .
  3. вызов / тестовый код неисправен.
  4. «int min value» больше, чем -2147483648. (Лучше использовать INT_MIN .)
  5. ft_intlen(n) неправильно закодирован и возвращает INT_MAX , то код пытается malloc(INT_MIN) .
  6. int/long 64-разрядная. Это беспорядок первый s[len — 1] = (n % 10) + ‘0’; С INT_MIN .

в противном случае, если INT_MIN имеет значение -2147483648, ft_itoa(int x) — это хорошо.

OP утверждает «. strdup просто выделяет строку, ft_intlen просто возвращает длину строки, оба проходят тестовые случаи-franklinexpress Oct 8 в 7: 52»

Читать еще:  Scanf в си примеры

прохождение тестовых случаев не означает, что он работал без вызова неопределенного поведения. Лучше всего разместить ft_intlen() , ft_strdup() и теста для обзора.

кандидат портативный реализация. Не зависит int/long размер или дополнение 2. Нет необходимости
помимо CHAR_BIT какой код мог бы предположим, что это 8, не жертвуя слишком много питьевой. Работает с C89/99/11.

кусок кода, который вы дали, компилируется и работает на OsX, но с моим собственным ft_stdup и ft_intlen . Таким образом, вы можете либо показать нам код, либо проверить их на наличие ошибок. Я сделал несколько тестов (в том числе 2147483647, -2147483648). Это прекрасно работает.

во всяком случае, строки:

if (x == -2147483648) return (ft_strdup(«-2147483648»));

бесполезны, пока вы копируете свой x стоимостью в long long переменной (искусство) перед делать любой вид деятельности оно. Так что вам не нужно включать types.h (пресловутый moulinette не даст вам -42).

бывает, что на OsX он работает и на long значения, но это не портативный безопасный.

причина этого в том, что некоторые компиляторы могут иметь проблемы с пониманием этого числа.

стандартная библиотека C ограничения.h обычно определяют его как:

си C99

Уважаемые форумчане. Что Вы думаете по поводу использования этого стандарта? Стоит ли его использовать? И использует ли кто либо вообще. Столкнулся с предупреждением вида:

вполне являются, особенно когда это правда 🙂

Надо аргументировать, например, С++ ублюдство т.к.:

— использует убогий препроцессор;
— имеет UB вроде разыменовывания указателей, «i = ++i + i++» и пр.;
— имеет платформозависимые типы, соглашения об экспорте/импорте символов, упаковке данных и пр;
— имеет множество реализаций, не всегда можно собирать под свежий C99 C++14;
— имеет скудную стандартную библиотеку, даже без контейнеров;
— что не мешает имеет всякие небезопасные sprintf и пр, которые легко могут записать что-нибудь в левый участок памяти, но которые никто не собирается выкидывать из стандарта.

Все пункты актуальны для Си.

С++ — очень сложный язык. Ты еще с пхытоном сравни. Хотя, пхытон даже сложней, чем С++.

не, бедон простой, он просто наркоманский. а С++ невероятно сложен.

Объективно С — наилучший язык программирования.

Объективно у тебя нет аргументов.

дай угадаю,тот же самый школьник strikes back?

С, в отличие от долбаных крестов, ещё и компилится со скоростью света практически.

low-level на сишке золотой, а высокоуровщину – на лиспах.
Меня лично невероятно вставляет кложура (хоть она и отталкивается от жабьей экосистемы). И ClojureScript.

дай угадаю,тот же самый школьник strikes back?

Блин, точно, snprintf тоже ж дефективный:

А еще его аргумент и результат имеют разные типы, в том числе не только знаковые/беззнаковые, но и разного размера для популярных платформ. Кстати, а ведь хороше же, что есть еще asprintf, vprintf, vdprintf, vsnprintf, vnprintf, wprintf, dprintf, fprintf, printf, vfprintf, vasprintf, sprintf_s, _snprintf, swprintf, fwprintf, _fprintf_l, fwprintf, _fwprintf_l и пр. и пр. Сразу видно богатый набор возможностей и Ъ-подход. Причем, что крайне удобно — часть функций платформоспецифичные. Это же все не просто так, это для байто%бства без смысла написания эффективного кода. Ну а так как везде поддержка С разная, кто-то еще не умеет С99 и т.д., то в коде просто надо написать:

Читать еще:  Язык си шарп

Ну а т.к. нужной функции может и не быть, надо всего-лишь в месте использования писать так:

Пример кода взят из zlib.

П.С. С++ в этом плане почти так же уродлив, наследственность как-никак.

И если кто-то будет оправдывать подобное уродство производительностью:

На JavaScript реализация быстрее сишной. И это логично, как минимум потому-что JIT для конкретной железки сможет сгенерировать более эффективный блоб, чем то, что выдаст компилятор С под среднепофигисткий i386 или amd64, например.

С++ в этом плане почти так же уродлив

почему «почти»? libc в С++ тот же самый, просто у мелкомягких он устарел. ну или можно вместо snprintf использовать std::string operator +. javascript станет еще быстрее — все довольны.

кстати, а что, в распоследних вижуалах нет snprintf? звучит дико, если учесть что была обещана поддержка c99.

ps по твоей же ссылке, автор таки пишет, что на js медленнее. пофиксь свой ингриш.

В С++ принято написать так:

Данный метод имеет как свои преимущества, так и недостатки. Ну или используют библиотеки вроде boost format, которая более продвинутая чем printf.

ps по твоей же ссылке, автор таки пишет, что на js медленнее. пофиксь свой ингриш.

По моей ссылке два бенчмарка, для старой и новой ноды. Алсо мнение автора на ЛОР:

Истина оказалась между — распаковка быстрее, сжатие медленнее.

ни разу не видел, чтобы в C++ кто-то так строки форматировал. но тебе, конечно, виднее.

По моей ссылке два бенчмарка, для старой и новой ноды.

угу, но словами написано: «Almost as fast in modern JS engines as C implementation (see benchmarks).»

а сами бенчмарки я не распарсил. есть где-то описание, что эти циферки значат?

ага, вроде разобрал

inflate-pako x 97.52 ops/sec
inflate-zlib x 60.32 ops/sec

очень даже неплохо. скорее всего, в бенчмарке ошибка, типа флаги оптимизации забыли, но все равно забавно.

кстати, почему в 1м бенче сишная версия на 10ops/sec быстрее? другое железо использовалось?

ни разу не видел, чтобы в C++ кто-то так строки форматировал. но тебе, конечно, виднее.

google://C++ int to string

Увидишь много предложений использовать ostringstream. С С++11 уже неактуально (to_string), но раньше даже такие простые вещи «форматировали» через ( 15.03.15 23:29:41 )

Увидишь много предложений использовать ostringstream.

бггг. и почему я не удивлен :))

Странная ирония, ведь ostringstream для этой задачи мало отличается sprintf. И то и другое комбайн используемый от безысходности. Вот только в C++ уже появился to_string, а что там в С, itoa/ftoa уже в стандарте или приходится микроскопом printf пользоваться? Или по старинке — препроцессор + собственная реализация на всякий случай?

Itoa си реализация

Источники питания электронной аппаратуры, импульсные и линейные регуляторы. Топологии AC-DC, DC-DC преобразователей (Forward, Flyback, Buck, Boost, Push-Pull, SEPIC, Cuk, Full-Bridge, Half-Bridge). Драйвера ключевых элементов, динамика, алгоритмы управления, защита. Синхронное выпрямление, коррекция коэффициента мощности (PFC)

  • среда в 10:18
  • Тему:Обратноходовый резонансный
  • От:Baza
  • Обратная Связь, Стабилизация, Регулирование, Компенсация

    Организация обратных связей в цепях регулирования, выбор топологии, обеспечение стабильности, схемотехника, расчёт

    • 27 марта
    • Тему:Шумы при компенсации реактивной мощности в лабор…
    • От:wim
  • Первичные и Вторичные Химические Источники Питания

    Li-ion, Li-pol, литиевые, Ni-MH, Ni-Cd, свинцово-кислотные аккумуляторы. Солевые, щелочные (алкалиновые), литиевые первичные элементы. Применение, зарядные устройства, методы и алгоритмы заряда, условия эксплуатации. Системы бесперебойного и резервного питания

    • 1 февраля
    • Тему:Как определить причину выхода из строя Li-Pol?
    • От:163264
    Читать еще:  Скачать музыку с вк безопасно
  • Высоковольтные Устройства — High-Voltage

    Высоковольтные выпрямители, умножители напряжения, делители напряжения, высоковольтная развязка, изоляция, электрическая прочность. Высоковольтная наносекундная импульсная техника

    • 13 часов назад
    • Тему:Какой феррит выбрать для высокочастотного и высо…
    • От:iiv
  • Электрические машины, Электропривод и Управление

    Электропривод постоянного тока, асинхронный электропривод, шаговый электропривод, сервопривод. Синхронные, асинхронные, вентильные электродвигатели, генераторы

    • понедельник в 19:48
    • Тему:Миниатюрный высокоскоростной усилитель привода
    • От:alexvu
  • Индукционный Нагрев — Induction Heating

    Технологии, теория и практика индукционного нагрева

    • 19 марта
    • Тему:Индукционный нагреватель на 100 кВт своими рукам…
    • От:ded2016
  • Системы Охлаждения, Тепловой Расчет – Cooling Systems

    Охлаждение компонентов, систем, корпусов, расчёт параметров охладителей

    • 10 марта
    • Тему:Параметры ФНЧ «источник-приёмник тепла»
    • От:Tuvalu
  • Моделирование и Анализ Силовых Устройств – Power Supply Simulation

    Моделирование силовых устройств в популярных САПР, самостоятельных симуляторах и специализированных программах. Анализ устойчивости источников питания, непрерывные модели устройств, модели компонентов

    • 13 февраля
    • Тему:Не считает.
    • От:SAVC
  • Компоненты Силовой Электроники — Parts for Power Supply Design

    Силовые полупроводниковые приборы (MOSFET, BJT, IGBT, SCR, GTO, диоды). Силовые трансформаторы, дроссели, фильтры (проектирование, экранирование, изготовление), конденсаторы, разъемы, электромеханические изделия, датчики, микросхемы для ИП. Электротехнические и изоляционные материалы.

    • Вчера в 17:52
    • Тему:Разводка планарного трансформатора
    • От:Plain
  • Интерфейсы

      Последнее сообщение

    Форумы по интерфейсам

    все интерфейсы здесь

    • 2 часа назад
    • Тему:Кто-нибудь подключал устройства к iPod Touch или…
    • От:Doka
  • Поставщики компонентов для электроники

      Последнее сообщение

    Поставщики всего остального

    от транзисторов до проводов

    • Вчера в 11:54
    • Тему:По СВЧ-компонентам
    • От:Walue
  • Компоненты

    Закачка тех. документации, обмен опытом, прочие вопросы.

    • Вчера в 14:49
    • Тему:Ищу datasheet на ADV7535
    • От:DSIoffe
  • Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир

      Последнее сообщение

    Обсуждение Майнеров, их поставки и производства

    наблюдается очень большой спрос на данные устройства.

    • 21 февраля
    • Тему:Зачем нужны дорогие майнеры
    • От:Doka
  • Дополнительные разделы — Additional sections

      Последнее сообщение

    Встречи и поздравления

    Предложения встретиться, поздравления участников форума и обсуждение мест и поводов для встреч.

    • 1 января
    • Тему:С наступающим Новым 2020 Годом.
    • От:Stanislav
  • Ищу работу

    ищу работу, выполню заказ, нужны клиенты — все это сюда

    • Вчера в 17:58
    • Тему:Разработка электроники (Украина).
    • От:FLPPotapov
  • Предлагаю работу

    нужен постоянный работник, разовое предложение, совместные проекты, кто возьмется за работу, нужно сделать.

    • 8 минут назад
    • Тему:Помощь в поиске или разработке передающего устро…
    • От:Rst7
  • Kуплю

    микросхему; устройство; то, что предложишь ты 🙂

    • среда в 17:03
    • Тему:Куплю ручной SMD манипулятор
    • От:Alt.F4
  • Продам

    есть что продать за деньги, пиво, даром ?
    Реклама товаров и сайтов также здесь.

    • вторник в 19:41
    • Тему:Продам Rohde & Schwarz cmu200
    • От:tillman
  • Объявления пользователей

    Тренинги, семинары, анонсы и прочие события

    • 13 часов назад
    • Тему:LDE/LHE – компактные ИП от Mornsun на печатную п…
    • От:КОМПЭЛ
  • Общение заказчиков и потребителей электронных разработок

    Обсуждение проектов, исполнителей и конкурсов

  • Ссылка на основную публикацию
    Adblock
    detector