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

292
Vistas
Escribir ceros en el segmento de archivo

Estoy usando fwrite para escribir un archivo (es una imagen).

Primero, estoy escribiendo un encabezado que tiene un tamaño fijo

 int num_meta_write_bytes = fwrite(headerBuffer, 1, headerSize, file);

esto funciona bien

Entonces tengo que escribir los píxeles:

 num_write_bytes = fwrite(data_pointer, 1, image_size, file);

esto funciona bien

Para mi caso, tengo que escribir un número variable de ceros entre el encabezado y los píxeles, la solución (¿fea?) que encontré es:

 for (size_t i = 0; i < padding_zeros; i++) //padding_zeros is calculated in runtime { uint8_t zero = 0; num_meta_write_bytes += fwrite(&zero, 1, sizeof(uint8_t), fp); }

(Este código se coloca antes de escribir los píxeles)

Mi pregunta es: ¿hay alguna manera de decirle directamente a fwrite que escriba continuamente el mismo valor padding_zeros veces? en lugar de usar esto for bucle?

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

0

Puede crear un bloque de datos lleno de ceros con calloc() , luego escribir esos datos en el archivo en una llamada (y recuerde free los datos después):

 uint8_t* zeros = calloc(padding_zeros, sizeof(uint8_t)); if (zeros) { num_meta_write_bytes += fwrite(zeros, sizeof(uint8_t), padding_zeros, fp); free(zeros); } else { // Error handling, or use your 'loop' method if calloc fails }

Como se menciona en los comentarios, también podría usar una matriz de longitud variable; sin embargo, los VLA son una característica 'opcional' en C (desde el estándar C11), y de todos modos tendría que establecer explícitamente los datos en ceros (con una llamada a memset ), ya que los VLA no se pueden inicializar como ordinarios (tamaño fijo) arreglos

over 4 years ago · Santiago Trujillo Denunciar

0

Encontré otra solución, aunque creo que depende del sistema operativo:

 fseek(fp, padding_zeros, SEEK_CUR);

Esto es bastante rápido ya que no hay asignación. Justo al copiar el archivo resultante, el sistema operativo generará los ceros reales.

Esto funcionó bien en mi objetivo de Linux.

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