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.
- ¿Cómo debe decidir un estudiante indio en qué rama debe optar por la ingeniería?
- Excepto las IIT, ¿hay alguna buena universidad de ingeniería aeronáutica o de ingeniería aeroespacial en India que también sea reconocida a nivel mundial?
- ¿La escuela de medicina / ingeniería de Harvard está basada en la necesidad?
- ¿En qué universidad de ingeniería podría ingresar con un rango de 1.75 lakh?
- Planeo ser ingeniero mecánico, ¿qué desafíos enfrentaré?
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.