Programación General > C/C++
Insertar ceros por la izquierda
Lerele_333:
Muy buenas a todos,
Soy nuevo en este foro y en primer lugar queria agredeceros la labor que haceis ayudandonos a todos aquellos que tenemos duduas.
En segundo lugar mi pregunta:
Queria saber como podría insertar un cero por la izquierda a un número en C, es decir, lo que intento es que al hacer una llamada al servicio "creat(argv[],permisos)" pueda tener en permisos (que es un int o float o double) un numero del tipo 0664. Mi problema es que unicamente consigo tener "permisos=664" lo que hace que el fichero se no se cree con los permisos deseados.
su -:
Se puede hacer con sprintf()
Halos:
El problema no creo que sea añadir un 0 a la izquiera, el problema es que lo que tu quieres pasarle como parámetro a la función es un número en octal, que se nota de esa manera.
Si obtienes los permisos desde el terminal, al leerlos de éste en vez de hacerlo por ejemplo scanf("%d",&permiso), deberías hacer que se interpretara como octal: scanf("%o",&premiso).
haevan:
Para aquellos que entraron atraidos por el asunto del hilo:
si tenemos un entero valor (del que partimos):
--- Código: C ---int i=4-strlen(atoi(valor));sprintf(resultado,"%4s",valor);while(i--) if (resultado[i]==32) resultado[i]='0';
No lo he probado (si hay algun detalle que me lo chafe me habre despistado), pero la base es esa
EDITO: Esta mal, se me volvio a ir la olla , con el atoi queria hacer todo lo contrario (pasar de entero a cadena)
cambiad
--- Código: C ---atoi(valor) por
--- Código: Text ---sprintf(NULL,"%s",valor) en la linea 1
m0skit0:
--- Cita de: "Halos" ---el problema es que lo que tu quieres pasarle como parámetro a la función es un número en octal
--- Fin de la cita ---
Creo que tienes razón, Halos. La solución más sencilla, Lerele_333, es convertir los permisos a decimal. De esta forma, 0664 es 436. Por tanto, si ponemos int permisos=436 (que es lo mismo que si pones int permisos=0664) seguro que te funciona perfectamente.
--- Cita de: "haevan" ---si hay algun detalle que me lo chafe me habre despistado
--- Fin de la cita ---
Si valor es un número entero... atoi(valor) no tiene ningún sentido entonces. Habrás querido decir itoa(valor, buffer, 10), y habría que declarar un char *buffer con suficiente espacio para que quepa la cadena resultante. Esto habría que hacerlo dependiendo del entero valor y por tanto con malloc(). En fin, bastante más complicado de cómo lo pintas ;) Ah, y no te olvides las etiquetas de código ^_^
Saludos
Navegación
[#] Página Siguiente
Ir a la versión completa