Terminar con un 0 tiene muchas características de rendimiento, que fueron muy relevantes a finales de los años 60.
CPUs tienen instrucciones de salto condicional en la prueba de 0. De hecho, algunos incluso tienen CPUs instrucciones que iterar/copiar una secuencia de bytes hasta el 0.
Si utilizó un carácter de escape en su lugar, tener dos pruebas DOS bytes diferentes para afirmar el final de la cadena. No solo eso es más lento, sino que también se pierde la capacidad de iterar un byte a la vez, ya que se necesita una vista previa o la posibilidad de dar marcha atrás.
Ahora, otros idiomas (tos, Pascal, tos) usan cadenas en un estilo de conteo/valor. Para ellos, cualquier personaje es válido, pero siempre mantienen un contador con el tamaño de la cadena. La ventaja es clara, pero también hay desventajas para esta técnica.
Por un lado, el tamaño de la cadena está limitado por el número de bytes que toma el conteo. Un byte le da 255 caracteres, dos bytes le da 65535, etc. Hoy podría ser casi irrelevante, pero agregar dos bytes a cada cadena una vez fue bastante costoso.
Editar:
No creo que la pregunta es tonta.En estos días de idiomas de alto nivel con administración de memoria, increíble potencia de CPU y cantidades obscenas de memoria, tales decisiones del pasado bien pueden parecer absurdas. Y, de hecho, PODRÍAN carecer de sentido hoy en día, por lo que es bueno cuestionarlos.
¿Qué sucede cuando quiere poner \ $ en una cadena? –
¡Entonces escapas del personaje de escape, por supuesto! –
@Bryan: No se puede escapar de un personaje, solo se puede escapar de la representación del código fuente de un personaje. Cualquiera que sea el personaje que use como terminación no puede usarse dentro de una cadena. – Guffa