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

214
Views
¿Por qué C usa 5 bytes para escribir/escribir el número 10, pero 4 bytes para escribir 9 u 11?

CCG en Windows

 #include <stdio.h> #include <stdlib.h> struct test { int n1; int n2; }; int main() { FILE *f; f = fopen("test.dat", "w"); struct test test1 = {10, 10}; fwrite(&test1, sizeof(struct test), 1, f); fclose(f); struct test test2; f = fopen("test.dat", "r"); while(fread(&test2, sizeof(struct test), 1, f)) printf("n1=%d n2=%d\n", test2.n1, test2.n2); fclose(f); return 0; }

Si configuro test1 en 10,10 , entonces fwrite escribirá 10 bytes en el archivo: 0D 0A 00 00 00 0D 0A 00 00 00

(cada int de 4 bytes se rellenará con un carácter de retorno de carro 0D antes)

Si configuro test1 en 11,11 , entonces fwrite escribirá 8 bytes en el archivo: 0B 00 00 00 0B 00 00 00

(como era de esperar)

Si configuro test1 en 9,9 , fwrite escribirá 8 bytes en el archivo: 09 00 00 00 09 00 00 00

(como era de esperar)

Si configuro test1 en 9,10 , fwrite escribirá 9 bytes en el archivo: 09 00 00 00 0D 0A 00 00 00

El 9 obtiene 4 bytes como se esperaba, pero el 10 se rellena con un byte 0D adicional, lo que da como resultado 5 bytes. ¿Qué tiene de especial el número 10 que requiere este relleno? ¿Y por qué los números más pequeños y más grandes (8, 9, 11, 12, 13, 14, etc.) no se rellenan? Pensé que tal vez GCC estaba confundiendo el número 10 con un carácter de nueva línea (una nueva línea es 10 es acsii), pero esto no explica cómo fread puede recuperar el número 10 correctamente.

¿Y cómo escribo una estructura para archivar sin obtener este relleno adicional en el número 10?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Abrió el archivo en modo de texto , por lo que en Windows cada carácter '\n' tiene un retorno de carro antepuesto.

Debería escribir (y leer) datos binarios en modo binario ( fopen(..., "wb") ) -- esto será mucho más rápido y evitará sorpresas (y también requiere solo 8 bytes, que es el tamaño de sizeof(struct test) es).

¿Qué tiene de especial el número 10 que requiere este relleno?

El número 10 resulta ser el código ASCII para un carácter de nueva línea ( '\n' ).

over 4 years ago · Santiago Trujillo Report

0

Está escribiendo y leyendo en modo texto.

Abra el archivo con las banderas "wb" y "rb". Esto tratará los archivos como archivos binarios.

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!