#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#define MAX_SIZE 512
int safe_vsnprintf(char *buffer, size_t size, const char *format, va_list args) {
// Usamos vsnprintf para evitar desbordamientos de buffer
int n = vsnprintf(buffer, size, format, args);
// Verificamos si el tamaño excede el límite
if (n < 0 || n >= size) {
// Si hay un error o el tamaño excede, retornamos -1
return -1;
}
return n; // Retornamos el número de caracteres escritos
}
int my_printf(const char *format, ...) {
char buffer[MAX_SIZE];
va_list args;
va_start(args, format);
int result = safe_vsnprintf(buffer, sizeof(buffer), format, args);
va_end(args);
if (result < 0) {
fprintf(stderr, "Error: el tamaño del mensaje excede 512 caracteres.\n");
return -1; // Manejo de error
}
// Imprimir el resultado
printf("%s", buffer);
return result; // Retornamos el número de caracteres escritos
}
int main() {
// Ejemplo de uso
my_printf("Este es un mensaje de prueba con un número: %d\n", 42);
my_printf("Este es un mensaje que excede el tamaño permitido: %s\n", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
return 0;
}