Jeeeelp with C!

zildjian

Bueeenas! Tengo que hacer un programa, que al iniciarlo le tengo que pasarle varios argumentos. El primero, el nombre del archivo, y los demas serían strings (nº indefinido) que copiaremos a dicho archivo. Para conseguir esto, he escrito lo siguiente:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <math.h>

void Print2File(char *filename, char *cadena){
	FILE *f = NULL;
	f = fopen(filename, "a");

fprintf(f, "%s\n", cadena);

fclose(f);
}

int main(int argc, char *argv[]){

int i;

if(argc<3){
	perror("No has introducido suficientes argumentos");
	exit(1);
}
else{
	for(i=1;i<argc;i++){
		Print2File(argv[0],argv[i]);
	}
}

return 0;
}

Lo ejecuto de la siguiente manera (no se si está bien): ./mcp fichero.txt, cadena1, cadena2, cadena3 pero me devuelve una violación del segmento.
¿Una ayudita please? .

Salu2 y gracias por adelantado.

m0rG

No uses comas en la llamada al programa,no son necesarias.Por otra parte la línea:

Print2File(argv[0],argv);

está mal. argv[0] es el nombre del ejecutable(en tu caso mcp).Los argumentos de llamada comienzan en argv[1] (que corresponderá al nombre del fichero donde va la salida en tu caso).Tendrías que cambiar esa línea por:

Print2File(argv[1],argv);

Y el bucle hacerlo a partir del valor 2( "i=2;i<argc;i++" ).

B

en argv[0] está la clave

se me adelantaron....

JuAn4k4

Para cada vez que escribes abres el fichero.

No es mas logico abrirlo 1 vez y luego escribir todo ?

argv[0] = ejecutable
argv[1] = nombreFichero
argv[2] = cadena1
...
argv[n] = cadena(n-2)
argc = n-1;

por lo que el bucle va desde 2 hasta argc-1

Poisonous

Print2File, que 1337 xd

B

Es una tontería, pero no estaría de más una comprobación de que abre el fichero sin fallos if (fopen<0) { printf("Oh shit"); }

zildjian

Thankkks! ;)

zildjian

Tengo una nueva duda de la misma índole, pero de una distinta práctica xD El primer argumento del programa es un char, y al intentar asignarlo a una variable mediante

/* Cargamos el caracter que es el segundo argumento en un char */
char c = &argv[1];

, al compilar aparece: warning: cast from pointer to integer of different size

Cómo puedo librarme del dichoso warning? Porque también lo he probado sin el '&' y tampoco rula.

Salu2.

Usuarios habituales