Go Down

Topic: Comment concatener char * et char tab ? (Read 858 times) previous topic - next topic

XiArduino

Jan 11, 2012, 12:55 am Last Edit: Jan 11, 2012, 01:14 pm by Jean-François Reason: 1
Bonjour,

La galère : pointeur et tableau ?

Comment concatener char *  et char tab  pour l'envoi dans la fonction vw_send de VirtualWire ?

Merci d'avance pour votre aide .
Xylobot.

Mon code -->
Code: [Select]
#include <VirtualWire.h> // inclusion de la librairie VirtualWire

char *msg = "Arduino"; // Tableau qui contient notre message

void setup() // Fonction setup()
{
   Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor
   vw_setup(2000);
}
int i; char buf[30]; char *c;
void loop() // Fonction loop()
{

       memset(buf,0,sizeof(buf));
       snprintf(buf, sizeof(buf), "%d", i);
       Serial.print(buf);

 /* ******************************************** */
 /* comment concaténer char * et char []  */
 /* ex strcpy (c,msg);                             */  <-- ca ne marche pas !   :0
 /*     strcat (c,buf);                              */
 /* ******************************************** */

   vw_send((uint8_t *) c, strlen(c));                   // On envoi le message
   vw_wait_tx();                                             // On attend la fin de l'envoi
   delay(1000);                                               // Et on attend 1s pour pas flooder
   i ++;
}


Edit de Jean-François : merci de mettre le code entre les balises

fdufnews

Qu'est-ce qui ne marche pas?
Au passage i n'est pas initialisé

XiArduino

#2
Jan 11, 2012, 11:05 am Last Edit: Jan 11, 2012, 01:15 pm by Jean-François Reason: 1
Bonjour,

En fait, je n'arrive pas a concatener un nombre [converti en tab], avec un pointeur de chaine !

Code: [Select]
char *msg = "Arduino";
int i=0; char buf[30]; char *c;

       memset(buf,0,sizeof(buf));
       snprintf(buf, sizeof(buf), "%d", i);
       Serial.print(buf);      -->      resultat OK  :)
       strcpy (c,msg);              
       strcat (c,buf);  
       Serial.print(c);         -->      resultat non OK   :0
       vw_send((uint8_t *) c, strlen(c));


Merci pour votre aide
Xylobot.free.fr


Edit de Jean-François : merci de mettre le code entre les balises

gerse

De mes souvenirs
c est déclarer comme un pointer
buf est un pointer sur le tableau
Ce n'est pas de la concatenation mais de l'affectation
c= buf;
===> tu peux donc utiliser buf directement.

Benvenuto

#4
Jan 11, 2012, 01:11 pm Last Edit: Jan 11, 2012, 01:13 pm by Benvenuto Reason: 1
Comme le dit gerse, lorsque tu passes un tableau à une fonction, c'est en réalité un pointeur vers le premier élément de ce tableau qui est passé.

Donc si buf est un char[], tu peux le passer à n'importe quelle fonction qui attend un char*, par exemple strlen.
Et tu peux aussi le transtyper en uint8_t*;

Code: [Select]
memset(buf,0,sizeof(buf));
snprintf(buf, sizeof(buf), "%d", i);
vw_send((uint8_t *) buf, strlen(buf));

Go Up