Autor Tema: lenguajeC warning: format ‘%s’ expects argument of type ‘char *’, but argument  (Leído 4771 veces)

gatoher

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 86
    • Ver Perfil
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.


Código: [Seleccionar]
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.
« Última modificación: 31 de Diciembre 2016, 16:46 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
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

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".