Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: gatoher en 19 de Diciembre 2016, 19:44
-
Hola a todos, tengo un problema al llamar a esta función, es un ejemplo de crear varios procesos:
Como se puede ver espera un primer parametro int y un array tipo char.
void crearPadreHijo(int argc, char argv[]){
if(argc != 2) {
printf("Numero de parametros incorrectos. Uso: %s [entero]\n",argv[0]);
exit(EXIT_FAILURE);
}
int var=atoi(argv[1]);
printf("Entrada: %d\n",var);
int ret;
ret=fork();
if(ret>0) {
/* tratamiento del padre */
var+=2;
printf("Padre: %d\n",var);
wait(NULL);
}
else if(ret == 0) {
/* tratamiento del hijo */
var-=4;
printf("Hijo: %d\n",var);
exit(EXIT_SUCCESS);
}
else if(ret == -1) {
perror("Fallo en fork()\n");
exit(EXIT_FAILURE);
}
}
Desde main hago:
char arr[10];
arr[0] = "1";
crearPadreHijo(2, arr);
Y al compilar me responde:
main.c: In function ‘crearPadreHijo’:
main.c:103:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
printf("Numero de parametros incorrectos. Uso: %s [entero]\n",argv[0]);
^
main.c:107:2: warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [enabled by default]
int var=atoi(argv[1]);
^
In file included from main.c:15:0:
/usr/include/stdlib.h:147:12: note: expected ‘const char *’ but argument is of type ‘char’
extern int atoi (const char *__nptr)
^
main.c: In function ‘main’:
main.c:143:12: warning: assignment makes integer from pointer without a cast [enabled by default]
arr[0] = "1";
^
He probado de varias maneras y no consigo que funcione.
-
Buenas, no estoy seguro pero el problema quizás esté relacionado con que no inicializas todos los elementos del array de char, sino que algunos quedan sin inicializar. De todas formas, ¿puedes poner los códigos completos para intentar compilarlos?
Otra posible indicación del errror es el mensaje format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’
Esto lo que indica es que espera un puntero a un array de char, pero que está recibiendo un int
Fíjate en esta línea:
printf("Numero de parametros incorrectos. Uso: %s [entero]\n",argv[0]);
Ahí estás invocando %s que corresponde a un string (array de caracteres) pero tú sin embargo estás pasándole argv[0] que es uno de los elementos del array, un entero.
Revísate los tipos de datos en este curso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=82&Itemid=210
Salu2