Go Down

Topic: Comment concatener char * et char tab ? (Read 894 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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy