C strcat – advertencia: pasar arg 2 de `strcat ‘hace que el puntero sea un entero sin una conversión

Estoy teniendo un problema con el progtwig de abajo. Estoy tratando de escanear un comando de cadena ingresado por el usuario para ciertas palabras. Mi principal problema ahora es que cuando ejecuto lo siguiente recibo una advertencia que dice que “pasar arg 2 de` strcat ‘crea un puntero desde un entero sin una conversión “. Mi intención es recorrer los primeros tres caracteres de la cadena “s”, concatenarlos en una cadena “firstthree”, y luego verificar el valor de la cadena “firstthree”. Cualquier ayuda es apreciada.

#include  #include  #include  #include  #include  #include  #include  #include  #include  /* Simple example of using gnu readline to get lines of input from a user. Needs to be linked with -lreadline -lcurses add_history tells the readline library to add the line to it's internal histiry, so that using up-arrow (or ^p) will allows the user to see/edit previous lines. */ int main(int argc, char **argv) { char *s; while (s=readline("Enter Name: ")) { add_history(s); /* adds the line to the readline history buffer */ printf("Hello %s\n",s);/*output message to the user*/ char *firstthree; int i; for(i = 0; i < 3; i++){ strcat(firstthree, s[i]); printf("Hello %s\n",firstthree);//checking to see the character added to the end of the string } printf("Hey %s\n",firstthree);/*prints out the first three characters*/ free(s); /* clean up! */ free(firstthree); } return(0); 

}

Tu progtwig tiene muchos problemas; nunca inicializas firstthree , por ejemplo.

La razón por la que está recibiendo el error específico que está viendo es debido a esta llamada:

 strcat(firstthree, s[i]); 

s es un char * , por lo que s[i] es un char , pero strcat espera que ambos parámetros sean punteros a cadenas terminadas en nulo. Lo que parece que quieres es algo como:

 char firstthree[4] = { 0 }; for (int i = 0; i < 3; i++) { firstthree[i] = s[i]; printf("Hello %s\n", firstthree); } 

No puedes usar strcat () para hacer esto; requiere dos char * s como argumentos, no un char * y un char. Podría usar strncat () si está disponible en su plataforma.