Форум программистов, компьютерный форум 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
22.12.2012, 16:04     Моя реализация функции перевода string в int
Цитата Сообщение от ValeryS
ты когда нибудь дизасемблировал Debug версию?
зачем лезть в асм. все проверяется куда проще:
C++
1
2
3
string a="123456789";
    char* c = new char (a[1]);
    cout<<c<<endl;
cout выводит поток символов до тех пор, пока не встретит \0. результат:
2¤¤¤¤▌▌▌°
Для продолжения нажмите любую клавишу . . .
как видишь, никакого \0 в памяти после двойки нет, ничего там компилятор вокруг двойки не занулял.
cout вывел мусор пока случайно не наткнулся на пустой байт.
думаю, на этом спор исчерпан.
Цитата Сообщение от ValeryS Посмотреть сообщение
как же по твоему отлавливать выход за пределы памяти
это делается не "занулением". new резервирует необходимое кол-во байт в незанятой памяти. компилятор это число запоминает и при попытке изменить значение ячейки ОП вне выделенного числа байт выдает ошибку. ничего за ее пределами он не "зануляет". это неэффективный расход памяти и опасно в конце концов. можно попасть не в свою память и что-нибудь важное "занулить".

Цитата Сообщение от ValeryS
а самый главный аргумент
atoi принимает строку
у ТС работает эта конструкция

C++
1
2
char* ch = new char(a[i]);
tmp = atoi(ch);
значит после памяти есть 0 и ch волшебным образом превращается в строку
она работает не потому что ch терминирован '\0', а потому что:
1. atoi игнорирует символы, не являющиеся числом. грубо говоря, в данной ситуации, он не обращает внимания на весь тот мусор, что лежит после 1 ого числового символа.
2. сканирует память до первого встретившегося \0. а он рано или поздно там встретиться. только вот сколько ему придется прочитать для этого байт - черт его знает. вот чтобы не пришлось читать лишнюю память, в спецификации и требуется \0 в конце.

Добавлено через 4 минуты
Цитата Сообщение от ValeryS
а если статическую строку дам?
статическая char строка терминуется \0 всегда. это стандарт языка. и лежит она в программном стеке, а не куче, где работает new.
 
Текущее время: 20:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru