Quiero decir, hasta donde yo sé, una cadena 'terminaría' cuando aparece 'valor nulo (\ 0)'.
Y muchas funciones tienen que ver con el valor de retorno de la cadena y escapan tan pronto como se encuentra con el 'valor nulo' en la cadena.
Pero, ¿y si no hay un valor nulo en la cadena?
¿Es incluso posible crear tal cadena?
Como, ¿es posible crear una matriz?
char cArray[100] ={};y llenar todos los índices sin 'nulo'?.
Si es así, ¿cuál es la mejor manera de 'indicar el final de la cadena que no tiene ningún valor nulo'?
¿Es incluso 'una cadena' si no tiene un valor nulo?
¿Es incluso posible crear tal cadena?
Puede tener matrices de char sin un elemento cero. Esos no son hilos.
Como, ¿es posible crear una matriz?
char cArray[100]; // the original had the illegal initializer = {};y llenar todos los índices sin 'nulo'?.
Sí, eso es perfectamente razonable ( memset(cArray, '*', 100); ). Pero cArray (o cualquier parte de él) no será una cadena.
Si es así, ¿cuál es la mejor manera de 'indicar el final de la cadena que no tiene ningún valor nulo'?
Si desea trabajar con secuencias de bytes sin un indicador, debe llevar la cuenta por separado.
char NotAString[6] = "abcdef"; size_t n = 6; // remove the 'f' from NotAstring n = 5; // remove the 'b' memmove(NotAString + 1, NotAString + 2, 3); n -= 1; // the first `n` (4) bytes of NotAString are now 'a', 'c', 'd', and 'e' // don't care about bytes 5 and 6¿Es incluso 'una cadena' si no tiene un valor nulo?
no
Pero, ¿y si no hay un valor nulo en la cadena?
Entonces no es una cadena. Una "cadena" se define en 7.1.1 Definiciones de términos , párrafo 1 en el (borrador) estándar C11:
Una cadena es una secuencia contigua de caracteres que termina e incluye el primer carácter nulo. El término cadena de varios bytes se usa a veces para enfatizar el procesamiento especial dado a los caracteres de varios bytes contenidos en la cadena o para evitar confusiones con una cadena ancha. Un puntero a una cadena es un puntero a su carácter inicial (la dirección más baja). La longitud de una cadena es el número de bytes que preceden al carácter nulo y el valor de una cadena es la secuencia de los valores de los caracteres contenidos, en orden.
Sin ese "carácter nulo", la matriz NO es una "cadena" .
Punto final.
Puede tener una matriz char sin el terminador nulo (después de todo, es como una matriz int), pero NO es una cadena (por definición) y no podrá usar todas las funciones estándar de C relacionadas con las cadenas ya que todos dependen de la presencia del terminador.
Al final, tendría que tratar la matriz de caracteres como una matriz genérica.