elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Análisis del vídeo del hackeo al Sindicato de los Mossos de Esquadra


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Problema con punteros a punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con punteros a punteros  (Leído 1,432 veces)
jion

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Problema con punteros a punteros
« en: 27 Febrero 2009, 22:28 »

Buenas.
Estoy haciendo un programita en C que decodifica netstrings y otros tipos de datos desde una cadena pasada. El programa trabaja con varias funciones las cuales toman un puntero a el puntero a la cadena (char**) para así tomar la parte de la cadena que utilizan y dejar el puntero a la cadena avanzado un lugar mas luego del ultimo caracter utilizado por la función. El problema esta en que no me corre este puntero, si no que lo deja en 0 (NULL).

Aca un ejemplo para que se entienda mejor (el programa original es bastante mas extenso, pero con esto es suficiente):

Código
  1. #include <stdlib.h>
  2. #include <string.h>
  3.  
  4. typedef long long int_64;
  5.  
  6. int_64 stoll(char** s);
  7. void test(char** cadena);
  8.  
  9. int main() {
  10.    char *cadena =  "45:Hola,4:chau";
  11.    char *cadena2 = cadena;
  12.    long long cant;
  13.  
  14.    test(&cadena);
  15.  
  16.    puts("* Esto funciona ************************");
  17.    cant = stoll(&cadena2);
  18.    printf("Cantidad de letras: %lld. Cadena luego del numero: %s\n", cant, cadena2);
  19.  
  20.    return 0;
  21. }
  22.  
  23. void test(char** cadena) {
  24.    int cant;
  25.  
  26.    puts("* Esto no funciona ************************");
  27.    cant = stoll(cadena);
  28.    printf("Cantidad de letras: %lld. Cadena luego del numero: %s\n", cant, cadena);
  29. }
  30.  
  31. int_64 stoll(char** s) {
  32.    int_64 n = 0;
  33.  
  34.    for (; **s >= '0' && **s <= '9'; ++(*s))
  35.        n = 10 * n + (**s - '0');
  36.  
  37.    return n;
  38. }
  39.  

Al ejecutar este programa la salida por la consola es la siguiente:

Código:
* Esto no funciona ************************
Cantidad de letras: -4632415712441270227. Cadena luego del numero: (null)
* Esto funciona ************************
Cantidad de letras: 45. Cadena luego del numero: :Hola,4:chau

Como pueden ver, tengo algun problema al pasar el puntero a puntero a la funcion test, pero no entiendo cual es  :huh:


« Última modificación: 28 Febrero 2009, 17:08 por jion » En línea



Karman


Desconectado Desconectado

Mensajes: 672



Ver Perfil WWW
Re: Problema con punteros a punteros
« Respuesta #1 en: 28 Febrero 2009, 05:16 »

y esta línea?

Código
  1.   aca(&cadena);
  2.  

S2


En línea

jion

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Problema con punteros a punteros
« Respuesta #2 en: 28 Febrero 2009, 17:09 »

Ups, perdon, deberia decir:

Código
  1. test(&cadena);

Ya lo corregí en el código.
En línea



Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.512


La mano invisible del mercado me robo la billetera


Ver Perfil WWW
Re: Problema con punteros a punteros
« Respuesta #3 en: 28 Febrero 2009, 17:21 »

Si lo depuras vas a ver que en test esta dando una excepcion, cadena esta mal seguro (y %lld me da problemas con VC++, no con g++ parece):

Código:
printf("Cantidad de letras: %ld. Cadena luego del numero: %s\n", cant, *cadena);

Segui depurandolo hasta que haga lo que queres exactamente.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
jion

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Problema con punteros a punteros
« Respuesta #4 en: 28 Febrero 2009, 17:33 »

Si, al final eran un par de errores tontos  :-[

La funcion test deberia ser asi:

Código
  1. void test(char** cadena) {
  2.    long long cant; /* <-- Seguramente por esto te daba problemas con el %lld */
  3.  
  4.    puts("* Esto ahora funciona :P ************************");
  5.    cant = be_stoll(cadena);
  6.    /* En el printf me falto desreferenciar cadena */
  7.    printf("Cantidad de letras: %lld. Cadena luego del numero: %s\n", cant, *cadena);
  8. }
  9.  

Asi como esta me funciona 10 puntos, y cuando vuelve a main el puntero cadena apunta ahora a el primer ':', que ese en realidad era mi verdadero problema. Gracias  :)
En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 2,319 Último mensaje 30 Diciembre 2012, 20:19
por MisterJava
Problema con estructura y punteros en C
Programación C/C++
Blaster 2 916 Último mensaje 8 Junio 2013, 21:08
por 0xDani
Problema con iterador a lista de punteros
Programación C/C++
SrCooper 4 1,102 Último mensaje 24 Julio 2013, 15:43
por Eternal Idol
Punteros dobles / Punteros a puntero.
Programación C/C++
NOB2014 5 1,249 Último mensaje 13 Abril 2016, 16:00
por MAFUS
(Consulta) Punteros a punteros en C
Programación C/C++
class_OpenGL 1 474 Último mensaje 19 Julio 2016, 14:29
por class_OpenGL
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines