Воскресенский, Эрнст Владимирович
- 1 year ago
- 0
- 0
object(crs_cache)#5 (5) { ["sys":"crs_cache":private]=> object(wiki_sys)#1 (6) { ["db"]=> object(mysqli)#2 (18) { ["affected_rows"]=> int(0) ["client_info"]=> string(14) "mysqlnd 8.0.28" ["client_version"]=> int(80028) ["connect_errno"]=> int(0) ["connect_error"]=> NULL ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["field_count"]=> int(0) ["host_info"]=> string(25) "Localhost via UNIX socket" ["info"]=> NULL ["insert_id"]=> int(0) ["server_info"]=> string(9) "5.7.41-44" ["server_version"]=> int(50741) ["sqlstate"]=> string(5) "00000" ["protocol_version"]=> int(10) ["thread_id"]=> int(46633643) ["warning_count"]=> int(0) } ["env"]=> array(0) { } ["cfg"]=> array(11) { ["DB_HOST"]=> string(9) "localhost" ["DB_USER"]=> string(7) "wiki_db" ["DB_PASS"]=> string(18) "theixoog6Ielei0ieC" ["DB_NAME"]=> string(7) "wiki_db" ["SITE_URL"]=> string(20) "https://wafarin.com/" ["PATH_MAIN_PAGE_DIR"]=> string(28) "/home2/cache/main_page_cache" ["PATH_MAIN_PAGE_INDEX"]=> string(32) "/home2/cache/main_page_index.dat" ["PATH_LATEST_PAGE_DIR"]=> string(30) "/home2/cache/latest_page_cache" ["PATH_LATEST_PAGE_INDEX"]=> string(34) "/home2/cache/latest_page_index.dat" ["PATH_IMAGES_INDEX"]=> string(29) "/home2/cache/images_index.dat" ["IMAGES_MIN_WIDTH"]=> int(100) } ["db_query_count"]=> int(0) ["memcached":"wiki_sys":private]=> object(Memcached)#3 (0) { } ["debug"]=> array(0) { } } ["objects":"crs_cache":private]=> array(0) { } ["memcached":"crs_cache":private]=> object(Memcached)#6 (0) { } ["cache_type"]=> NULL ["filecache_folder"]=> string(12) "/home2/cache" }
Нуль-терминированная строка или C-строка (от названия языка Си ) или ASCIIZ-строка — способ представления строк в языках программирования, при котором вместо введения специального строкового типа используется массив символов, а концом строки считается первый встретившийся специальный нуль-символ (NUL из кода ASCII , со значением 0).
Например, в строковом буфере (области памяти, выделенной для хранения строки) размером 11 байт нуль-терминированная строка «СТРОКА» в кодировке Windows-1251 может представляться следующим образом:
С | Т | Р | О | К | А | NUL | F | % | NUL | 4 |
0xD1 | 0xD2 | 0xD0 | 0xCE | 0xCA | 0xC0 | 0x00 | 0x46 | 0x25 | 0x00 | 0x34 |
В данном примере представлена область памяти из 11 байт, хотя на самом деле строка занимает всего 7. Символы после нуль-символа (8 - 11 байты) называются мусором — это данные, которые могли остаться в буфере от предыдущих строк или от других использований памяти. Среди них также могут находиться нулевые символы.
При использовании однобайтных кодировок ( ASCII ) объём памяти, требуемый для представления строки из N символов, равен N + 1 байт. В том случае, когда для кодирования символов применяется Юникод , длина строки зависит от используемого представления Юникода (например, 2N + 2 байта для UCS-2 ).
Такие строки являются стандартом в Си и некоторых других языках программирования. Поскольку они используются для передачи строковых аргументов в стандартные функции во многих операционных системах , операции для работы с нуль-терминированными строками появились в Паскале и других языках.
Для ссылки на нуль-терминированную строку применяется указатель на первый её символ. Это простой, быстрый и гибкий подход, но чреватый ошибками . Программист постоянно должен следить за своим кодом, а именно:
Кроме того, некоторые операции со строками, например, конкатенация , для нуль-терминированных строк выполняются медленнее, чем для других типов строк.
Альтернативой нуль-терминированным строкам являются способы, принятые в Паскале и современных ООП-языках. В Паскале строка начинается с первого элемента массива, а в нулевом элементе хранится длина строки. В этом случае не требуется специального терминатора для обозначения конца строки. С другой стороны, здесь на длину строки накладывается ограничение, связанное с вместимостью нулевого элемента массива, то есть в случае с однобайтовыми элементами длина строки не может превышать 255 символов. Нуль-терминированные строки такому ограничению не подвержены и теоретически могут хранить строки любой длины. В объектно-ориентированных языках применяется хранение записи с длиной строки и ссылкой (или указателем) на массив символов. Эти способы не подвержены недостатку нуль-терминированных строк: они могут хранить в себе нуль-символы без искажений и специального кодирования.
В ряде интерфейсов применяются дважды-нуль-терминированные строки, признаком завершения которых является два последовательных нуль-терминатора .
Для работы с нуль-терминированными строками в языке программирования Си используется ряд функций :
В некоторых разновидностях
языка ассемблера
для определения NUL-терминированных строк используется специальная директива. Так в GNU Assembler-е для этого есть директива
.asciz
.