Коротко о строках Си

Строка – это просто набор символов. Не больше и не меньше. Исходя из этой природы в Си строка – это обычный массив символов, заканчивающийся символом ”(проще говоря, нулем). Язык не имеет встроеннных средств по работе со строками и предполагает наличие внешней библиотеки для их обработки. Стандартная библиотека языка содержит такой набор функций, они хорошо описаны на различных сайтах. Здесь же я буду освещать только особенности строк как таковых.

1. Программист сам должен контролировать завершающий ноль. Ни язык, ни система не проверяют его наличие. А отстусвие завершающего символа чаще всего приводит к краху Вашей программы.
Поэтому Вам необходимо детально изучить строковые функции с которыми придется работать.

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

2. Память под строки выделять нужно самостоятельно и вручную. Язык не производит абсолютно никакого контроля за размером строки(как и за размером массива в целом). Поэтому, прежде чем склеить 2 строки в одну, проверьте, хватит ли вам места в результирующей строке.

3. Большинство стандартных функций работают со строками посимвольно. Например, strlen для определения длины строки перебирает все символы пока на ее пути не встретится завершающий нолик. Поэтому не злоупотребляйте одинаковыми вызовами, а просто запоминайте промежуточные результаты для последующего использования.

4. Иногда страндартных функций бывает недостаточно, приходится писать свои обработчики строк. Так вот, злоупотребление набором вызовов стандратных функций может резко понизить эффективность Вашей программы, разложите алгоритм по пальцах и попробуйте реализовать его самостоятельно, без использования чужих реализаций. Но эффективность такого решения не всегда выше, поэтому прежде чем делать, хорошенько подумайте.



Digital Ocean
Провайдер облачного хостинга - заведи свой виртуальный сервер всего за $5 в месяц !

4 Comments

  1. c0nst

    Некоторые компиляторы воспринимают “\n” так же, как и конец строки. Вследствие, некоторые функции могут выдавать неправильный результат (strlen, например). Так что перед использованием нового компилятора необходимо читать его описание.

  2. tolix

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

Leave a Reply