Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

207
Views
¿'\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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!