Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

ИО Капитана Очевидности


Contributor


Сообщения: 5387
Благодарности: 1105

Профиль | Отправить PM | Цитировать


Цитата dakishi:
Я дошел до темы "функции", в которой пока копаюсь, она очень длинная. »
Собственно говоря, я не понимаю, почему во многих учебниках в качестве "простых примеров" используют такие, где много подводных камней.
Для экспериментов лучше использовать значения типа int (цифры)


Цитата dakishi:
Еще, способ с массивом так много времени тратит, неужели он такой полезный ? »
Видишь ли в чём дело.
Функции работы символьными массивами работают немного быстрее, но программисту при этом самому нужно контролировать операции выделения памяти и проверку длины строк. При этом малейшая ошибка может повредить данные самым непредсказуемым образом.
Вот простой пример
Код: Выделить весь код
const char *sourse = "Сорок тысяч обезьян в одно место сунули банан"; //Указатель на массив символов, размещённый в области констант
char *target = malloc (32); // Указатель на область памяти размером 32 байт, выделенную в "куче" под массив символов
ctrcpy (target, sourse); // Функция копирования строки из области памяти по адресу sourse в область памяти по адресу target
Функция strcpy копирует информацию из одной области памяти в другую до тех пор, пока не встретит ноль (не символ '0' с кодом 48, а специальный символ с кодом 0), который означает конец строки - данный символ автоматически добавляется в конец исходной строки. Однако исходная строка имеет размер 41 байт, а конечная - всего 32. Таким образом, функция копирования строки затрёт 9 "лишних" байт,*необратимо повреждая информацию, которая была выделена другим объектам этой программы.
В*результате при работе программы неизбежно возникнет множество ошибок, которые "неизвестно почему" проявятся в других участках кода. Выявить причину такой ошибки - дело очень сложное. Так что лучше сразу использовать объекты типа string, которые обеспечивают автоматическую проверку размеров строк и выделения областей памяти. Благо мощность ЭВМ позволяет это делать.
А символьные указатели используют только в тех участках программы, где требуется максимальное быстродействие. Но создание таких программ - удел профессионалов, которые хорошо понимают, что и как работает

-------
Самое совершенное оружие, которым забиты арсеналы богатых и процветающих наций, может легко уничтожить необразованного, больного, бедного и голодного. Но оно не может уничтожить невежество, болезнь, нищету и голод. (Фидель Кастро)

Почему всех осужденных за измену Родине при Сталине реабилитировали при Горбачёве по отсутствию состава преступления? Потому что при Горбачёве измену Родине перестали считать преступлением.


Последний раз редактировалось Delirium, 18-05-2010 в 03:44. Причина: El Scorpio, в качестве примеров выбирайте более цензурные выражения.


Отправлено: 02:11, 18-05-2010 | #17