Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con punteros

Estas en el tema de Ayuda con punteros en el foro de C/C++ en Foros del Web. Que tal, he comenzado a ver el tema de los apuntadores y tengo el siguiente codigo que no funciona: #include <stdio.h> #include <stdlib.h> int numLet(char ...
  #1 (permalink)  
Antiguo 16/11/2006, 23:35
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
Ayuda con punteros

Que tal, he comenzado a ver el tema de los apuntadores y tengo el siguiente codigo que no funciona:

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

int numLet(char **org, char **des);

int i=0;

int numLet(char **org, char **des)
{
while(*org++)
{
*(des+i)=*(org+i);
i++;
}
return i;
}

int main()
{
char *org,*des;
int r;
printf("Cadena: ");
scanf("%s",&org);
numLet(&org,&des);
printf("Numero de letras es: %d\n\n",i);
system("pause");
return 0;
}

como soy principiante en este tema, no se en donde esta mi error, ya que al correrlo, me muestra un valor de 13, cea cual sea el numero de letras, y al terminar el problema se traba la ventana y me aparece la ventana de finalizar tarea, les agradeceria cualquier ayuda, gracias...
  #2 (permalink)  
Antiguo 17/11/2006, 02:33
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
El codigo esta un poco erroneo por no decir completamente ...

Estas tratando de usar scanf sobre un puntero INDEFINIDO, org y des apuntan a cualquier lado. O usas memoria dinamca (malloc/new & free/delete) o usas memoria estatica.

Despues en numlet adelantas org cada vez y ademas usas la i para comparar ... ademas estas usando doble puntero innecesaria y erroneamente.

¿El objetivo es tener dos cadenas iguales y averiguar el tamaño de la cadena obtenida del teclado?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 17/11/2006, 15:40
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Haber:


char *org,*des;
scanf("%s",&org);

Aqui estan 2 errores terrible(que por cierto estan explicados en las faqs)
org es una variable puntero ok? bueno cuando haces scanf, el segundo argumento es una "referencia" por lo que no necesita el operador de direccion "&": scanf("%s",org); Esto es porque org ya es puntero, ya tiene la direccion, no un valor.

El otro error fatal, es el que te ha mencionado Eternal Idol. No puedes usar un puntero asi namas. tienes que inicializarlo, y con inicializarlo no me refiero a ponerle 0. Para inicializar un puntero en C tienes que usar malloc en c++ el operador "new".

Por otro lado, no se porque suar punteros dobles.
Un puntero doble, como lo explique en las faqs, es igual que un array de 2 dimensiones
**org es equivalente a org[][] con la unica diferencia que **org no esta inicialiizado y org[x][y] los inicializas en la con los valores de x y y.

Checa las faqs para que peudas ver otro tipo de errores que puedas tener.

Saludos
  #4 (permalink)  
Antiguo 17/11/2006, 18:09
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Igualmente punteros dobles son bastante tontos cuando representan arrays bidimensionales... Con uno basta.
  #5 (permalink)  
Antiguo 18/11/2006, 12:11
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
No tratare de justificarme, lo que pasa es que la funcion que coloque en el codigo, fue una funcion que hiso el profesor que me da esa materia, entonces yo lo que hice fue leer la cadena y mandarle los argumentos y ahi era donde no sabia como hacerlo, de hecho el dia de ayer(viernes) le comente sobre ese detalle pero solo me dijo que probablemente habia un desbordamiento, solo me dijo eso.

Mi error fue el de no tratar de entender primero el programa.

Tambien revisare lo que me dices Eternal Idol, lo de (malloc/new & free/delete), aunque no se como se utiliza, pero lo revisare y tratare de solucinar el problema, de antemano les doy las gracias a Instru, Eternal Idol y Max extreme.

Revisare las faq's, creo que tenia que empezar por hai, de nuevo gracias a todos
  #6 (permalink)  
Antiguo 18/11/2006, 13:22
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
Que tal, estuve haciendo algunas modificaciones al codigo y finalmente lo he dejado de esta forma:

Cita:
#include <stdio.h>
#include <string.h>

int main()
{
char *p;
char cad[10];
int i=0;
printf("Cadena: ");
gets(cad);
p=cad;
while(*p++)
i++;
printf("Numero de letras es: %d\n\n",i);
free(p);
return 0;
}
Ahora no se si esa sea la forma correcta de hacerlo, ya que me da los resultados que yo deceo, la verdad es que solo tengo una pregunta, esta bien la declaracion que hago con la variable cad ?, de nuevo gracias
  #7 (permalink)  
Antiguo 18/11/2006, 13:51
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Eso esta mejor pero cad es un poco chico con solo 10 caracteres ... y no tiene sentido el free sobre p ya que no hay malloc ademas de que lo estarias haciendo en una direccion equivocada (adelantaste p, ya no es igual a cad, si cad fuera memoria reservada con malloc igual estaria mal el free).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 18/11/2006, 15:42
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Esta mucho mejor. Solo quitale el free(p).

Saludos
  #9 (permalink)  
Antiguo 18/11/2006, 21:23
Avatar de BLEND  
Fecha de Ingreso: marzo-2006
Mensajes: 97
Antigüedad: 18 años, 1 mes
Puntos: 0
Gracias Eternal Idol e Instru, la verdad es que me imagine que tenia que hacer lo del free, de nuevo gracias todos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:21.