Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - huchoko

#21
El compilador te muestra que errores tienes. Deberías darle un vistazo.
#22
No es que sea islamófobo ni nada, pero, que la catedral se queme justo en semana santa no parece sospechoso? No sé solo digo, el mundo está lleno de coincidencias extrañas.
Francia y el resto de europa con excepción de algunos países, recibe a refugiados y inmigrantes sin ningún control. Véase el lamentable caso de Suecia.
Y, sin olvidarlo, es una gran pérdida patrimonial, por su antigüedad. No olvidemos las pérdidas patrimoniales causadas por el EI en Irak, o en Afganistán por los talibanes.
#23
Gracias, funciona perfectamente! Gracias a ambos!
Cita de: RayR en  8 Abril 2019, 01:20 AM
Ese error se debe a que te falta un break para el case 'x' (y ya que estamos, para el case '%').
Ah, ¡esos condenados break! siempre me pasa, y por más que reviso el código siempre se me cola uno  ;-)
Saludos  :)
#24
Ahora si funciona para los enteros, pero aún está el problema con los hexadecimales.
Osea, si le paso el hexadecimal 0xF2, imprime 0xF2, pero no tiene el terminador nulo, lo cual hace que se imprima un caracter aleatorio después de imprimir el hexadecimal. (Sólo pasa cuando se trata de imprimir hexadecimal, los demás están ok)
#25
Mismo problema, hacer un cast de int a char cuando trato de imprimir hexadecimal no imprime nada, y el mismo problema...

int kputs(const char *fmt, ...) {
/* Empty string sanity test */
if (!fmt)
return 0;
char buffer[1024] = {0};
va_list args;

size_t cout;
unsigned int* charc;
va_start(args, fmt);

for (cout = 0; cout < strlen(fmt); ++cout) {
switch (fmt[cout]) {
case '%':
switch (fmt[cout + 1]) {
case 'c':
charc = (char)va_arg(args, int);
putch(charc);
++cout;
break;
case 's':
charc = va_arg(args, char *);
strcpy(buffer, (const char*) charc);
print_string(buffer);
++cout;
break;
case 'i':
charc = va_arg(args, int);
itoa(charc, buffer, 10);
print_string(buffer);
++cout;
break;
case 'X':
case 'x':
charc = (char)va_arg(args, int);
itoa(charc, buffer, 16);
print_string(buffer);
++cout;
case '%':
putch("%");
++cout;

default:
va_end(args);
return 1;
}
break;
default:
putch(fmt[cout]);
break;
}
}
va_end(args);
return cout;
}
#26
Cita de: CalgaryCorpus en  7 Abril 2019, 01:13 AM
Tienes que variar el tipo del segundo parametro de va_arg.

Tu solo usas unsigned int (o int) y deberias usar el tipo que calce con el % que se pasa.

Mira el ejemplo al final de aqui: https://linux.die.net/man/3/va_arg

Gracias, pero aún así no me funciona, mismo problema.  :-(
#27
Buenas, he hecho una implementación de printf, sin usar vsnprintf (por que no puedo).
Funciona bien, pero si trato de formatear un número hexadecimal y aveces cadenas, se descontrola todo, por lo que pienso que se me está colando un terminador nulo '\0' .
Ejemplo:
kputs("r8: %x    r9: %x    r10: %x", r->r8, r->r9, r->r10);
Salida:
r8: b8000└
Sólo me imprime r8  y de ahí el valor en hexadecimal, pero los demás los ignora y no imprime r9 ni r0.
Nótese el carácter "└" el cual no es esperado.

int kputs(const char *fmt, ...) {
/* Hacer nada si la cadena esta vacia. */
if (!fmt)
return 0;
char buffer[1024] = {0};
va_list args;

size_t cout;
unsigned int* charc;
va_start(args, fmt);

for (cout = 0; cout < strlen(fmt); ++cout) {
switch (fmt[cout]) {
case '%':
switch (fmt[cout + 1]) {
case 'c':
charc = va_arg(args, unsigned int);
putch(charc);
++cout;
break;
case 's':
charc = (int*) (va_arg(args, unsigned int));
strcpy(buffer, (const char*) charc);
print_string(buffer);
++cout;
break;
case 'i':
charc = va_arg(args, int);
itoa(charc, buffer, 10);
print_string(buffer);
++cout;
break;
case 'X':
case 'x':
charc = va_arg(args, int);
itoa((unsigned)charc, buffer, 16);
print_string(buffer);
++cout;
case '%':
putch("%");
++cout;

default:
va_end(args);
return 1;
}
break;
default:
putch(fmt[cout]);
break;
}
}
va_end(args);
return cout;
}

Las funciones itoa no creo que sean el problema, por que mi implementación no tiene problemas para imprimir enteros. (excepto que se desborda con un número muy grande, eso se arregla fácil)
#28
Pues digamos que dentro de una carpeta tengo más carpetas, de las cuales hay aún más carpetas. Cómo puedo borrar archivos de una misma extensión recursivamente en todas las carpetas que estén dentro de la carpeta principal?
Se que puedo usar rm -rf *.o, pero tengo miedo de dispararme el pie y borrar todo el disco entero.
Saludos  :)
#29
GNU/Linux / Re: problema al instalar linux
4 Abril 2019, 04:20 AM
O que es tu gráfica o los drivers del Linux en sí. Culpa de NVIDIA y Intel por no querer aportar a hacer drivers de calidad, y ser unos bastardos privativos. Es hipócrita decir esto cuando uso una lap con Windows, aunque solo lo uso por los drivers (otra vez, ven?) de impresora, ya que por estudios necesito la impresora, la cual sólo en Windows funciona.
#30
Pues eso, no logro hacer que Bochs use archivos ISO envez de archivos IMG. Nececito usar Bochs por su debugger.
Alguna idea?
Saludos