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