TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 25 de Abril de 2018, 21:14:26

Título: Problemas con la funcion Sprintf
Publicado por: Medusa en 25 de Abril de 2018, 21:14:26
Hola Todos, estoy usando el CCS v4.73, por favor alguien me podria decir cual es mi error en este codio:
Código: [Seleccionar]
#include <18F4620.h>
#fuses HS,NOWDT,WDT32768,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20MHz)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)// RS232 Estándar

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

int j,i;
char Cabecera1[]={0x00, 0x11, 0x00, 0x0D, 0x81};
char Buffer[10];

void main(){   

   j=0;
   for (i=0; i<5; i++){
      sprintf(Buffer[j+i],"%02X",Cabecera1[i]);             
   }
   
 while(TRUE);

}

Al correr el programa yo espero encontrar en Buffer los valores de Cabecara1, pero esto no sucede, Buffer permanece vacio, sin data

Por que no funciona la funcion Sprintf?
Título: Re:Problemas con la funcion Sprintf
Publicado por: KILLERJC en 25 de Abril de 2018, 22:48:38
Lo correcto:

Código: C
  1. sprintf(Buffer,"%02X",Cabecera1[i]);

ya que sprintf es:

Código: C
  1. int sprintf ( char * str, const char * format, ... );

el primero argumento es un PUNTERO al buffer que vas a usar, luego esta el formato y sus demas variables.

el puntero al primer valor de Buffer, es Buffer o tambien que es lo mismo que &Buffer[0]. O sea el puntero al primer elemento de buffer.
Si vos haces Buffer[j+i] , lo que estas haciendo es darle como puntero el valor que se encuentra dentro del Buffer en la posicion i+j, suponete que sea 0, entonces le estas dando un puntero a 0, y por ende jamas va a llenar buffer.
Título: Re:Problemas con la funcion Sprintf
Publicado por: Eduardo2 en 25 de Abril de 2018, 23:06:59
Tenés 3 errores.

1-  El que señaló Killerjc,  le estás pasando a sprintf el valor que se encuentra en Buffer[i+j], no su dirección.
     Debió ser:   
Código: [Seleccionar]
sprintf(&Buffer[j+i],"%02X",Cabecera1[i]);

2- Estás metiendo en Buffer de a 2 caracteres e incrementás la posición de a 1
     Debió ser: 
Código: [Seleccionar]
sprintf(&Buffer[j+2*i],"%02X",Cabecera1[i]);
3- sprintf convierte a Asciiz (termina el string con un 0 )  por lo tanto cuando escribas el último caracter va a escribir un 0 en la posición 11.
    Buffer debe ser de 11 caracteres o vas a pisar la variable que se ubique después.
    Debió ser: 
Código: [Seleccionar]
char Buffer[11];
Título: Re:Problemas con la funcion Sprintf
Publicado por: Medusa en 26 de Abril de 2018, 17:12:16
Gracias! por  la corrección, funciona... ((:-))