Чому рядки з нульовим завершенням погані?

Нульове закінчення склалося історично проблеми безпеки. Значення NUL, вставлене в середину рядка, несподівано обрізає його. Поширеною помилкою було не виділення додаткового простору для NUL, тому його записували в суміжну пам’ять.

Завершення рядків: використовується нульовий символ для позначення кінця рядка. Це допомагає компілятору C визначити кінець рядка та уникнути переповнення буфера, що може призвести до пошкодження пам’яті та збоїв програми.

Рядок має завжди закінчуватися NULL CHARACTER '\0'; Якщо '\0' не використовується тоді не буде кінця для рядка.

Нульовий символ не є частиною рядка, а лише маркером, який повідомляє, де закінчується рядок. Ви можете передати рядок із нульовим символом у кінці функції, не передаючи окремого розміру, оскільки функція може дізнатися, скільки рядка має, шукаючи нульовий символ.

Власні рядки Rust не завершуються нулем, хоча існують альтернативні типи рядків (CString, CStr). Якщо ви хочете викликати функцію, для якої потрібен рядок із закінченням нуля, вам доведеться перетворити, якщо у вас його ще немає. І так, останнє правда. Просто як воно є.

Нульове припинення економить невелику кількість місця, але вимагає більше коду та більше часу для обчислення довжини. Явне поле довжини коштує на одне слово більше на рядок, але обчислення довжини займає постійний час.