Iniciar sesión

Ver la versión completa : Programación en C - Ayuda con fopen



nakio
02/08/2008, 21:47
Hola a todos, lo que estoy haciendo es un poco rebuscado y por tanto la pregunta también, pero vamos a ello.

El programilla que estoy haciendo genera unos ficheros cuyo nombre viene dado por un contador situado en un fichero.
Si por ejemplo en el contador se encuentra el número 23 el nombre del fichero que quiero generar sería 24, pero por lo que veo no hay manera de introducir una variable dentro de 'fopen'
Aqui os pongo un ejemplo de como sería:




void generador()
{
int nombre;
int nombrefinal;

FILE *countname;
countname = fopen( "countname", "r" );
fscanf(countname, "%i", &nombre);
nombrefinal = nombre + 1;
fclose( countname );
FILE *creado;
creado = fopen(Aqui iría el nombre del fichero generado,"w");
.
.
.
fclose(creado);
}



Creéis que es posible?

Saludos, Nakio.

pakoito
02/08/2008, 21:51
char * nombre <- o como sea, ya ni me acuerdo
int numero

scarnf(&#37;s, &nombre)
numero = taltal sacado de tu fichero y retocado
char *nombrefichero=strcat(nombre, numero)
fopen(nombrefichero, "w");

nakio
02/08/2008, 22:15
No funciona, nu entiendo lo que haces con scarnf :S

Saludos, Nakio.

pakoito
02/08/2008, 22:19
Lo he puesto en pseudocodigo practicamente, est&#225; lleno de errores. Tienes que declarar una cadena y un int, lees la cadena del nombre del archivo por teclado (&#191;es por teclado no?) de manera correcta, sacas el entero de donde sea, haces un strcat entre ambos a una nueva cadena auxiliar y usas el auxiliar como nombre de fichero.

nakio
02/08/2008, 23:09
EDIT: tengo una idea.

Saludos, Nakio.

Aiken
03/08/2008, 00:22
yo en lugar de con strcat lo he hecho alguna vez generando el nombre del archivo con sprintf. pero la idea es la misma. ;)

Aiken

nakio
03/08/2008, 02:05
Al final lo hice con sprintf ;):


sprintf(nombrefichero, "&#37;i", nombrefinal);

Saludos y gracias, Nakio.

< - >
Joeeee, tengo oxidad&#237;simo el C.

Ahora tengo el siguiente problema. Si se da una condici&#243;n en el programa se ejecuta una funci&#243;n, que no tiene argumentos, dentro de la cual hay un gets.
Pues bien, cuando ejecuto el programa y me ejecuta esa funci&#243;n pasa ol&#237;mpicamente del gets y no me deja escribir la cadena de caracteres con espacios incluidos. Si cambio el gets por un scanf por ejemplo el programa si se detiene para poder insertar los datos, pero claro la funci&#243;n ya no cumple su cometido.

Alguna idea? :S

Saludos, Nakio.

pakoito
03/08/2008, 02:07
Eso me pasaba a mi a veces (creo que con c++). Hay un error dentro de esas funciones con gets y se salta su uso. Ve metiendo flags a cada l&#237;nea y comprueba que todo est&#233; bien.

nakio
03/08/2008, 19:53
Aaaarghh! aparentemente esta todo bien pero no hay manera.
Me estoy poniendo de mala o**ia! me da que en breve me voy a sobar.

Saludos, Nakio.

< - >
Al final hoy m&#225;s depejado he solucionado el problema con:


scanf("&#37;*c%[^\n]",documento);

en lugar de:


gets( documento );

Saludos, Nakio.

FlipFlopX
07/08/2008, 00:09
Cuesti&#243;n del compilador, el gets es "peligroso" :S si alguien sabe el porqu&#233;...

PharaOnyx
07/08/2008, 00:14
Cuesti&#243;n del compilador, el gets es "peligroso" :S si alguien sabe el porqu&#233;...
Porque es propenso al 'buffer overflow' (desbordamiento de pila y tal x'D). Prueba con 'fgets'

Saludos, Alex

FlipFlopX
07/08/2008, 00:17
Una cosa m&#225;s aprendida, gracias por el aporte, ya s&#233; el porqu&#233; del "dangerous" ;)

nakio
07/08/2008, 00:19
Eso s&#237;, flipante que si llamas a una funci&#243;n que contenga un gets() el programa se la pase por el forro...

Saludos, Nakio.