¿Cuál es el propósito de la línea [c] = ‘\ 0’ en un bucle donde la línea es una matriz de tipo char?

Mudit Panwar hizo un excelente trabajo al responder esta pregunta. Me gustaría complementar su respuesta con información adicional.

La razón por la que usamos el terminador nulo es porque es lo que la mayoría (si no todas) de las API usan para determinar dónde termina la cadena C.

Supongamos que tengo char buffer[10] . Ahora técnicamente el buffer[9] es el final de la matriz de caracteres real (cadena c), pero eso no siempre indica el final del valor de la cadena.

Digamos que solo inserto dos caracteres en los primeros dos bloques del búfer:

buffer [0] = ‘O’;
buffer [1] = ‘K’;

Ahora, si haces una printf("%s\n", buffer); , Puedo asegurar que no vas a obtener “OK”; obtendrá “OK” junto con los caracteres basura u otros comportamientos locos. ¿Porqué es eso? Printf () sin precisión seguirá imprimiendo cada carácter hasta que vea un terminador nulo. Sin terminador nulo => comportamiento inesperado.

Sin un terminador nulo, el uso de funciones como strcpy () conducirá a resultados desastrosos. Strcpy () se basa en el terminador nulo de la fuente para finalizar la copia. Si no se encuentra un terminador, strcpy () seguirá iterando cada índice de la fuente y escribirá en la misma posición de índice del destino, incluso cuando el índice esté fuera de rango.

De acuerdo, puede usar strncpy () que le permite pasar el valor de tamaño del búfer, que aún no le excluye de no poner un terminador nulo (strncpy () a diferencia de strcpy () no insertará un terminador nulo automáticamente si el fuente no lo tiene).

¿Dónde deberías ponerlo? Al final de su valor de cadena real. Para el ejemplo “OK”, insertará el terminador nulo en el búfer [2]:

buffer [2] = ‘\ 0’;

NOTA: Cuando comience a leer más y más código, notará que algunos programadores usarán buffer[2] = 0 lugar. Eso está bien, tanto 0 (cero) como '\0' son iguales.

Sin embargo, para facilitar la lectura, es posible que desee seguir con '\0' en su código. Cuando esté contribuyendo al código de otras personas, manténgalo consistente. Si están usando 0 , use 0 para evitar posibles confusiones.

Supongo que está hablando de establecer un carácter al final de una cadena en ‘\ 0’, no hacerlo en un bucle. ¿Está bien?

Diferentes idiomas tienen diferentes representaciones de cadena. En algunos lenguajes (como C #, Java y Pascal), la longitud de la cadena es parte de la representación de la cadena. Eso significa que la cadena puede almacenar cualquier carácter, incluido un carácter 0 (que no debe confundirse con el número ‘0’), y que obtener la longitud de la cadena es trivial. En C, una cadena es un puntero a algunos caracteres. Encuentra el final de la cadena comenzando desde el principio y caminando hasta encontrar un carácter 0).

Esto significa que varias operaciones de cadena en C son terriblemente ineficientes para cadenas largas. Obtener la longitud de una cuerda larga no es barato, así que tenga cuidado al hacer algo como

while (i {
//cosas
}

strcat tiene un problema relacionado. Di que haces
strcat (strcat (a, b), c);
strcat (a, b) elimina las caminatas desde el comienzo de la cadena a hasta que encuentra el ‘\ 0’ al final de la cadena a, le agrega la cadena b y le devuelve un puntero a la cadena a. Eso significa que la segunda llamada a ejecutar debe caminar desde el principio de la cadena nuevamente, más allá de todo lo que estaba en la cadena a y la cadena b antes de eliminar el ‘\ 0’ y agregar.

‘\ 0’ representa el carácter nulo. Siempre es el último carácter de una cadena (matriz de caracteres)

while (línea [c]! = ‘\ 0’)
{
/ * el código se ejecutará hasta el final de la cadena * /
}