Aclaración: Dado que una cadena literal puede ser reescrito como un const char[]
(ver abajo), imponiendo una longitud max inferior en literales que en char[]
s es sólo un inconveniente sintáctica. ¿Por qué el estándar C fomenta esto?¿Por qué la longitud máxima de la cadena C es literalmente diferente de la máxima char []?
El estándar C89 tiene un límite de traducción de cadenas literales:
509 caracteres en una cadena de caracteres literal de cadena o ancho literal (después de la concatenación)
No hay una límite para una matriz de caracteres; quizás
32767 bytes en un objeto (en un entorno alojado única)
se requiera (no estoy seguro de qué objeto o entorno alojado significa), pero en todo caso se trata de un límite mucho más alto.
Mi entendimiento es que una cadena literal es equivalente a personajes que contienen matriz de caracteres, es decir: siempre es posible volver a escribir algo como esto:
const char* str = "foo";
en este
static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;
Entonces, ¿por ejemplo una límite duro en literales?
Es muy extraño que hayan elegido 509 en lugar de 65533 o 253. –
Le recomendamos leer este artículo: http://msdn.microsoft.com/en-us/library/sx08afx2.aspx –
Límites en el programa * fuente * no tiene nada que ver con los límites en el programa compilado. –