Autor Tema: Función atoi y punteros a caracteres  (Leído 3250 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Función atoi y punteros a caracteres
« en: 14 de Enero de 2006, 00:02:00 »
Intentando ayudar al compañero Algec del FORO me he encontrado con este problema:

- Este primer programa funciona perfectamente:

Codigo:
#include <16f877a.h>

#fuses XT,NOWDT,NOPROTECT
#use delay (clock=4000000)
#include <lcd.c>
#use fast_io(B)
#use fast_io(D)

main()
{
   //char cadena[]={"1","3","7"};      //OK
   char cadena[]="137";      //OK

   char *pcadena;
   int n;
   
   lcd_init();   
   
   set_tris_b(0x00);
   set_tris_d(0x00);

   pcadena=cadena;
   
   for (n=0;n<3;n++)
   {
      lcd_gotoxy(1,1);
      printf(lcd_putc,"cadena[%u] = %c",n,*(pcadena+n));         
      delay_ms(2000);
   }   

}  



Pero al intentar usar la función atoi con punteros a caracteres me devueve 0 en los tres casos de conversión a entero:


Codigo:
#include <16f877a.h>
#include <stdlib.h>

#fuses XT,NOWDT,NOPROTECT
#use delay (clock=4000000)
#include <lcd.c>
#use fast_io(B)
#use fast_io(D)

main()
{
   //char cadena[]={"1","3","7"};      //OK
   char cadena[]="137";      //OK

   char *pcadena;
   int n;
   
   lcd_init();   
   
   set_tris_b(0x00);
   set_tris_d(0x00);

   pcadena=cadena;
   
   for (n=0;n<3;n++)
   {
      lcd_gotoxy(1,1);
      printf(lcd_putc,"cadena[%u] = %u",n,atoi(*(pcadena+n)));         
      delay_ms(2000);
   }   

}  



¿Sabriais encontrarle una solución?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
RE: Función atoi y punteros a caracteres
« Respuesta #1 en: 14 de Enero de 2006, 00:42:00 »
¿Serviría si operas con el código ASCII de esos caracteres?. Teniendo en cuenta que el carácter "0" tiene el código 48 (decimal), y que los demás números son consecutivos hacia arriba, restándole 48 unidades a cada carácter debería dar el valor correcto:
A ver, no lo he probado pero, ¿y si pones esto?
printf(lcd_putc,"cadena[%u] = %u",n,(*(pcadena+n)-48));

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Función atoi y punteros a caracteres
« Respuesta #2 en: 14 de Enero de 2006, 04:07:00 »
No,no puede servir ya que *(pcadena+n) ya dá el contenido de un determinado elemento de la cadena. Por ejemplo *(pcadena+0) nos daría como resultado el primer caracter de la cadena: el "1" y a este caracter si le aplicamos ahora la función atoi debiera de dar un 1 entero, pero no, dá 0 como resultado de las 3 conversiones.

También he comprobado lo que sugieres Manolo y no va.

Desconectado gfp

  • PIC18
  • ****
  • Mensajes: 274
RE: Función atoi y punteros a caracteres
« Respuesta #3 en: 14 de Enero de 2006, 14:44:00 »
Ya has intentado actualizando la versión del PCWH? Si no estoy mal en el los ultimos manuales o bien en el "readme.txt" hablan de mejoras al respecto.

gfp Sonrisa

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Función atoi y punteros a caracteres
« Respuesta #4 en: 14 de Enero de 2006, 23:19:00 »
Estoy usando la 3.241 que es con la que pasa esto.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Función atoi y punteros a caracteres
« Respuesta #5 en: 15 de Enero de 2006, 14:58:00 »
Con la misma version confirmado que ocurre


 

anything