Форум программистов, компьютерный форум CyberForum.ru

Моя реализация функции перевода string в int - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структура «Железнодорожный состав» http://www.cyberforum.ru/cpp-beginners/thread741289.html
Создайте консольное приложение для решения задачи С++ Структура «Железнодорожный состав» с полями "номер поезда", "количество вагонов", "модель вагонов" (в одном составе используются вагоны одной модели). Бизнес-функция: расчёт длины состава по длине вагона для определенной модели (табл.). Модель вагона 10-4022 10-475 11-066 11-1709 11-1759
C++ Виртуальные функции Можете привести пример виртуальной функции с использованием ссылок? http://www.cyberforum.ru/cpp-beginners/thread741278.html
C++ Структура «Железнодорожный состав»
Структура «Железнодорожный состав» с полями "номер поезда", "количество вагонов", "модель вагонов" (в одном составе используются вагоны одной модели). Бизнес-функция: расчёт длины состава по длине вагона для определенной модели (табл.). Модель вагона Длина вагона(в м.) 10-4022 117,2 1--475 116,3 11-066 147,2 11-1709 ...
Другие виды списков C++
Помогите найти и исправить ошибку в задачке В текстовом файле заданы действительные числа. Выбрать из него убывающую последовательность наибольшей длины и вывести ее на экран. Если таких последовательностей несколько, то вывести их все в отдельной строке каждую. Для заполнения убывающих последовательностей формировать массив очередей, хранить для каждой очереди длину ее (количество...
C++ Наибольшее из трех чисел http://www.cyberforum.ru/cpp-beginners/thread741266.html
Составить функцию, которая получает три аргумента х, y, и z, и возвращает как результат наибольшее из х,y,z.
C++ Заменить каждую из групп точек одной точкой Ввести строку. Создать функцию, позволяющую заменить в заданной строке каждую из групп стоящих рядом точек одной точкой. Если знака <<.>> нет в строке, то вывести сообщение об етом.(использовать указатели). подробнее

Показать сообщение отдельно
fit
14 / 14 / 0
Регистрация: 20.04.2010
Сообщений: 102
23.12.2012, 06:48     Моя реализация функции перевода string в int
Цитата Сообщение от ValeryS
"Пастернака не читал но осуждаю"
да я-то с ним знаком, только зачем так все усложнять ежели и так все под носом
Цитата Сообщение от ValeryS
нет он только начинается
еще раз
во первых какой компилятор? во вторых в каком режиме?
VS2010. и в runtime и в debug после двойки мусор. cout же это наглядно поясняет и без отладчика.
Кликните здесь для просмотра всего текста

Цитата Сообщение от ValeryS
никто не гарантировал что вокруг памяти будут 0 но у ТС срабатывает эта строка
C++
1
int m=atoi(buf);
значит никакого мусора нет (иначе бы ноль вернула)
читаем спецификацию функции и таки прекращаем спор
еще раз, на пальцах объясню, каким чудом это работает в нашем случае:
1. atoi начинает сканировать строку. видит, первый символ - число. все нормально, сканирует дальше.
2. видит, 2ой элемент массива не число (мусор пошел). игнорирует его - завершает разбор. переводит найденную до того цифру к int и возвращает значение.
3. 0 atoi возвращает ежели в переданном массиве не встретилось вообще ни одного числа, либо перед цифрами имелся не числовой символ (за исключением \t, +, -)
в общем, мифические "зануления" здесь не причем.

Цитата Сообщение от ValeryS
ссылку в листинге, а не свои размышления.
где он их запоминает? формат памяти в дампах?
это я во всякой разной литературе читал, когда писал компилятор. так-то сейчас специально уточнил и вот что обнаружил: конкретно в с++ контроль за выходом за границы динамического массива вообще отсутствует.
подтверждаю рабочим примером:
C++
1
2
int* f = new int[5];
f[6]=7;
проверьте - ни разу не ругнется на выход за пределы памяти, никаких исключений. ни в runtime, ни в debug. еще один аргумент, что никакого "зануления" в целях отлова как оказалось мифической для плюсов ошибки не существует.

Цитата Сообщение от ValeryS
в отладочном режиме ты выделяешь 100 байт а выделяется 200(к примеру) и сверху и снизу есть защитный буфер при обращении к которому вызывается исключение
в режиме реализации ничего такого нет, поэтому можно получить странное поведение
еще раз если ты что то утверждаешь приводи ассемблерные листинги(хотя бы для одного конкретного компилятора)
1. этоn буфер принудительно зануляется? нет, я конечно сейчас не могу отрицать его существование. но у меня большие сомнения, что там именно нули. а это важно.
2. почему примеры говорят об обратном? ну не видит VS никаких исключений, а мусор видит и массивы за границей памяти спокойно инициализирует. и я не полезу в ассемблер дабы это проверять, потому как пока что верю своим глазам и таки знаю стандарты.

Цитата Сообщение от ValeryS
выделено 5 байт
посредине я вставил 0 т.е строка всего три байта
что выдаст atoi?
по твоей логике 5367( я же пять байт выделил)
по моей 53( строка кончилась)
atoi ведет разбор до первого нечислового символа. в идеале это нулевой байт \0. в реалиях что угодно не числовое.

Цитата Сообщение от ValeryS
противоречия не чествуем?
в статике нет new
с new я видимо неправильно сформулировал свою мысль. не имелось ввиду, что передается к примеру 5 байт, что new зарезервировал. конечно же передается только указатель (адрес на 1 элемент).
мной имелось ввиду, что динамический char массив не терминуется нулем при его инициализации. new инициализирует ровно столько байт, сколько нужно для размещения переданного аргумента.
про статику. видимо невнимательно читаешь, либо специально делаешь из меня дурака.
конструкция:
C++
1
char* ch = "abcd"
неявно терминует \0 строку abcd в конце. вот тут-то, в статике, есть этот \0, который не мы "не видим". при инициализации через new \0 не существует.
 
Текущее время: 15:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru