Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Comment copier une chaine de caractere ?
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
je n'arrive pas a copier proprement une chaine de caractères, connaissez vous une méthode adéquat ?
Je récupère via l'UART une chaine de caractères que je stocke dans une variable type tableau Rx_Buffer[] . Comme j'affiche cette chaine de caractère sur mon écran, il faut que je la sauvegarde quelque part pour pouvoir la réutiliser après avoir reçu une nouvelle chaine de caractère ( pour l'effacer en fait) .
Penser vous qu'il faut que je copie caractère par caractère dans une routine spéciale ? désolé , je me mélange les pinceaux avec les pointeurs tableaux string etc .. ce n'est pas encore devenu clair comme de l'eau de roche pour moi mais plutôt de la boue
je n'arrive pas a copier proprement une chaine de caractères, connaissez vous une méthode adéquat ?
Je récupère via l'UART une chaine de caractères que je stocke dans une variable type tableau Rx_Buffer[] . Comme j'affiche cette chaine de caractère sur mon écran, il faut que je la sauvegarde quelque part pour pouvoir la réutiliser après avoir reçu une nouvelle chaine de caractère ( pour l'effacer en fait) .
Penser vous qu'il faut que je copie caractère par caractère dans une routine spéciale ? désolé , je me mélange les pinceaux avec les pointeurs tableaux string etc .. ce n'est pas encore devenu clair comme de l'eau de roche pour moi mais plutôt de la boue
Comment copier une chaine de caractere ?
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
il te faut donc une autre table si tu veux conserver le contenu (precedent) du buffer de reception UART.
il suffit de declarer une autre table avec la bonne taille memoire
#define MaxTaille 80 // à definir
char Autre_Table[MaxTaille];
// la routine strcpy fait le boulot : char *strcpy(char *to, char *from);
strcpy(Autre_Table,Rx_Buffer);
il faut cependant que Rx_Buffer soit considéré comme un string ( pas la ficelle !)
et doit avoir un Zero comme terminateur..
en remplacant par exemple le dernier caractere recu dans Rx_buffer par 0
exemple extrait de ma routineRX interrupt
Je récupère via l'UART une chaine de caractères que je stocke dans une variable type tableau Rx_Buffer[] . Comme j'affiche cette chaine de caractère sur mon écran, il faut que je la sauvegarde quelque part pour pouvoir la réutiliser après avoir reçu une nouvelle chaine de caractère ( pour l'effacer en fait) .
il te faut donc une autre table si tu veux conserver le contenu (precedent) du buffer de reception UART.
il suffit de declarer une autre table avec la bonne taille memoire
#define MaxTaille 80 // à definir
char Autre_Table[MaxTaille];
// la routine strcpy fait le boulot : char *strcpy(char *to, char *from);
strcpy(Autre_Table,Rx_Buffer);
il faut cependant que Rx_Buffer soit considéré comme un string ( pas la ficelle !)
et doit avoir un Zero comme terminateur..
en remplacant par exemple le dernier caractere recu dans Rx_buffer par 0
exemple extrait de ma routineRX interrupt
Code : Tout sélectionner
if (c1==CR)
{
// TXREG='@';
Flag_Buffer1=1; // arme drapeau signalant buffer rempli et validé
Buffer1[i1]=0; // zero pour fin de string
Index1=i1; // recopie dans Index1 , visible dans le main programme ( à utiliser ou pas, mais renseigne sur la longueur d string recu)
i1=0; // RAZ index de stockage dans le buffer
}
else
{
Buffer1[i1]=c1; // reception en cours, stockage du caractere recu
Index1=i1; // mise à jour Index global
i1++; // incremeny index local
}
Comment copier une chaine de caractere ?
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Merci Paulfjujo pour ces explications .
j'avais déjà lu un truc sur strcpy, mais je ne m'en souvenez pas ! merci. Je pense que c'est la solution.
sans Zéro terminateur ceci n'est pas considéré comme un string si je comprends bien?
Je ne comprends pas, et ne trouve pas d'info sur ton expression Buffer1[i1]=0; . Que signifie le i1 exactement "i+1" ?
Je pense du coup que je vais faire autrement car plus rapide à priori . c'est de dessiner un rectangle noir sur le texte, plutôt de ré-écrtire le texte en noir. Ainsi je vais définir une zone de texte et j’effacerai avec un rectangle ;
j'avais déjà lu un truc sur strcpy, mais je ne m'en souvenez pas ! merci. Je pense que c'est la solution.
sans Zéro terminateur ceci n'est pas considéré comme un string si je comprends bien?
Je ne comprends pas, et ne trouve pas d'info sur ton expression Buffer1[i1]=0; . Que signifie le i1 exactement "i+1" ?
Je pense du coup que je vais faire autrement car plus rapide à priori . c'est de dessiner un rectangle noir sur le texte, plutôt de ré-écrtire le texte en noir. Ainsi je vais définir une zone de texte et j’effacerai avec un rectangle ;
Comment copier une chaine de caractere ?
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
Que signifie le i1 exactement "i+1" ?
c'est i1++; ou i1=i1+1;
j'incremente l'indice i1 qui sert d'index de rangement du prochain caractere dans le buffer.
C'est peut etre deroutant par rapport à Index1 qui est l'image de l'index du dernier caractere rangé
la difference entre les 2
c'est que i1 pointe sur la prochaine position dans la table
et que Index1 est la derniere position remplie.
Nota: on peut tres bien ignorer Index1 .. si inutilisé ailleurs ..
sans Zéro terminateur ceci n'est pas considéré comme un string si je comprends bien?
Tout à fait, sinon on risque lorsqu'on fait un UART1_Write_Text( Rx_buffer); de deborder de la table
et meme planter le programme ..
C'est pourquoi , si on definit une taille de table de texte pouvant contenir 20 caracteres
il faudrait , de preference , la dimensionner à 21 ( Caracteres de 0 à 19 = 20 emplacements + zero terminateur, le 21em)
au cas ou on utiliserait un string (chaine de caracteres) de longueur 20
Comment copier une chaine de caractere ?
Jérémy a écrit :Je pense du coup que je vais faire autrement car plus rapide à priori . c'est de dessiner un rectangle noir sur le texte, plutôt de ré-écrtire le texte en noir. Ainsi je vais définir une zone de texte et j’effacerai avec un rectangle ;
En voila une bonne idée Tient toujours dans cette ligne c'est comme çà que l'on faisait du temp de VGA une petite idée pour supprimer Tes fonts qui c'est? tes textes en images rapide pas de recherche lettre après lettre affichage rapide comme la fonction rectangle et meme si je me trompe pas tu as la fonction surface
c'est ICI https://fr.wikipedia.org/wiki/Sprite_%2 ... %C3%A9o%29 bon c’était en 2D, l'animation.
A+
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 47 invités