Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

215
Vistas
¿'\0' aparece naturalmente en los archivos de texto?

Encontré un error algo molesto hoy en el que una cadena (almacenada como char[]) se imprimía con basura al final. La cadena que se suponía que debía imprimirse (usando las funciones de impresión/escritura de arduino) era correcta (incluía correctamente \r y \n). Sin embargo, habría basura impresa al final.

Luego asigné un elemento adicional para almacenar un '\ 0' después de '\ r' y '\ n' (que fueron los últimos 2 caracteres en la cadena que se imprimirá). Luego, print() imprimió la cadena correctamente. Parece que se usó '\0' para indicar a la función print() que la cadena había terminado (recuerdo haber leído esto en la C de Kernighan).

Este error apareció en mi código que se lee de un archivo de texto. Se me ocurrió que no encontré '\0' en absoluto cuando diseñé mi código. Esto me lleva a creer que '\0' no tiene un uso práctico en los editores de texto y simplemente se usan en las funciones de impresión. ¿Es esto correcto?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Las cadenas C terminan con el byte NUL ( '\0' ) - esto se agrega implícitamente a cualquier literal de cadena entre comillas dobles, y se usa como terminador por todas las funciones de biblioteca estándar que operan en cadenas. De esto se deduce que las cadenas C no pueden contener el terminador '\0' entre otros caracteres, ya que no habría forma de saber si es el final real de la cadena o no.

(Por supuesto, podría manejar cadenas en el lenguaje C que no sean cadenas C; por ejemplo, simplemente agregar un número entero para registrar la longitud de la cadena haría que el terminador fuera innecesario, pero tales cadenas no serían completamente interoperables con funciones que esperan cadenas C. )

Un "archivo de texto" en general no se rige por el estándar C, y un usuario de un programa C posiblemente podría dar un archivo que contenga un byte NUL como entrada a un programa C (que sería incapaz de manejarlo "correctamente" para el razones anteriores si lee el archivo en cadenas C). Sin embargo, el byte NUL no tiene una razón válida para existir en un archivo de texto sin formato, y puede considerarse al menos un estándar de facto para los archivos de texto que no contienen el byte NUL (o ciertos otros caracteres de control, que podrían interrumpir la transmisión). de ese texto a través de algunos terminales o protocolos seriales).

Yo diría que es una limitación aceptable (¡aunque no necesaria!) que un programa que trabaja con entrada de texto sin formato no garantice una salida correcta si hay bytes NUL en la entrada. Sin embargo, el programador debe ser consciente de esta posibilidad, independientemente de si se tratará correctamente, y no permitir que cause un comportamiento indefinido en su programa. Al igual que todas las entradas de los usuarios, debe considerarse "insegura" en el sentido de que puede contener cualquier cosa (por ejemplo, podría formarse de forma malintencionada a propósito).

over 4 years ago · Santiago Trujillo Denunciar

0

Esto me lleva a creer que '\0' no tiene un uso práctico en los editores de texto y simplemente se usan en las funciones de impresión. ¿Es esto correcto?

Esto está mal. En C, el final de una cadena de caracteres se designa con el carácter \0 . Esto se conoce comúnmente como el terminador nulo . Casi todas las funciones de cadena declaradas en la biblioteca C bajo <string.h> usan este criterio para verificar o encontrar el final de una cadena.

Un archivo de texto, por otro lado, normalmente no tendrá ningún carácter \0 . Por lo tanto, al leer texto de un archivo, debe anular la terminación de su búfer de caracteres antes de imprimirlo.

over 4 years ago · Santiago Trujillo Denunciar

0

\0 es la secuencia de escape de C para el carácter nulo (código ASCII 0) y se usa ampliamente para representar el final de una cadena en la memoria . El carácter normalmente no aparece explícitamente en un archivo de texto; sin embargo, por convención, la mayoría de las cadenas C contienen un terminador nulo al final. Las funciones que leen una cadena en la memoria generalmente agregarán un \0 para indicar el final de la cadena, y las funciones que generan una cadena desde la memoria también esperarán un \0 .

Tenga en cuenta que hay otras formas de representar cadenas en la memoria, por ejemplo, como un par (length, content) (Pascal usó esta representación en particular), que no requieren un terminador nulo ya que la longitud de la cadena se conoce de antemano.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda