Esto es lo que ise pero no funciona.
char pcname()
{
char p[20];
char *n;
printf("Entre pc: ");
n = gets( p );
return p;
}
| |||
Tienes varios problemas, lógicos y en los que todos hemos caido al empezar con C:
Código:
Te explico: No hace falta recoger el valor que devuelve gets(). gets() necesita 1 parámetro (char *) que es donde guardará la cadena, y cuando termina, lo que hace es devolver ese mismo parámetro. Es decir: Después de "n = gets(p);", "n" y "p" son exactamente lo mismo. Por tanto, con escribir "gets(p)" es suficiente.char pcname() // Una cadena es "char *", no "char" { char p[20]; char *n; // ¿Para qué usas "n"? printf("Entre pc: "); n = gets( p ); // ¿Para qué usas "n" return p; // NO debes devolver "char p[20]", porque es una variable local } El problema "gordo": No debes hacer "return p;". Esto puede ser confuso. Cuando empieza la función, el compilador ha dejado sitio para p[20] (20 bytes en concreto). Después, tú escribes la cadena, y la escribe en p[20]. Hasta ahí bien. Pero tú devuelves p. ¿Qué ocurre al salir de la función? El compilador ha dejado código que destruye a "p". Por tanto, aunque hagas return p; estás copiando un puntero a un lugar que no existe (aunque te funcione, puede que no lo haga, y en el momento que vuelvas a hacer pcname() seguro que no funcionará). Por tanto, la función, bien escrita te la dejo aquí. Se puede hacer una función que use memoria dinámica (que es como se debe hacer), pero para no complicarte, usa el código como te pongo:
Código:
Ten en cuenta que por ahora ese código te puede servir, pero enseguida verás que usar arrays para cadenas que tenga que introducir el usuario es la cosa más peligrosa que existe. Tal cual está el código que te he escrito, es víctima fácil de un hackeo. void pcname(char * p) { puts("Introducir pc: "); gets(p); } int main() { char nombre1[100]; char nombre2[100]; pcname(nombre1); pcname(nombre2); /* prueba */ printf("nombre1: %s\nnombre2: %s\n\n",nombre1,nombre2); return 0; } |
| ||||
grasias max. estupenda tu explicación.
__________________ "No hay lenguaje de programación potente que sea inferior a otro semejante cuando existe un buen programador que lo defiende" Yosvanis Cruz Alias VisualGuallabo Ycruz |