мета-данные страницы
Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| c:c_ultimate_guide:strings [2025/10/10 10:51] – создано radi0dev | c:c_ultimate_guide:strings [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in | ||
|---|---|---|---|
| Строка 17: | Строка 17: | ||
| char message[] = {' | char message[] = {' | ||
| </ | </ | ||
| + | </ | ||
| + | |||
| + | ===== Явное определение длинны ===== | ||
| + | |||
| + | <code c> | ||
| + | // a b c \0 - все верно | ||
| + | char abc[4] = " | ||
| + | |||
| + | // нулевой байт будет отброшен | ||
| + | char abc[3] = " | ||
| + | |||
| + | // лишнее место заполниться нулевыми байтами | ||
| + | char abc[5] = " | ||
| + | |||
| + | // поведение определено компилятором | ||
| + | // например gcc отбросит лишние символы | ||
| + | char abc[2] = " | ||
| + | </ | ||
| + | |||
| + | ===== Строка как указатель ===== | ||
| + | |||
| + | Но в языке Си также для представления строк можно использовать [[pointers|указатели]] на тип char: | ||
| + | <code c> | ||
| + | #include < | ||
| + | | ||
| + | int main(void) { | ||
| + | char *hello = "Hello METANIT.COM!"; | ||
| + | printf(" | ||
| + | return 0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Заданные таким образом строки __изменять нельзя__, | ||
| + | |||
| + | В языке Си для работы со строками применяется такой механизм как //string interning// или // | ||
| + | |||
| + | Указатель на строковой литерал содержит адрес первого бита литерала в этой секции неизменяемых данных | ||
| + | |||
| + | < | ||
| + | Если два указателя с разными идентификаторами будут ссылаться на одинаковые строковые литералы - они будут ссылаться на один и тот же адрес в памяти. | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | Как и любому указателю, | ||
| </ | </ | ||