Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3287 connectés 

 


Dernière réponse
Sujet : [c++] chaînes de caractères (char *)
juju_le_barbare

el_gringo a écrit a écrit :

 
 
...ça dépend des contrôles que t'utilises.
ça coute rien et c plus sur de le mettre !



:jap:


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
juju_le_barbare

el_gringo a écrit a écrit :

 
 
...ça dépend des contrôles que t'utilises.
ça coute rien et c plus sur de le mettre !



:jap:

El_gringo

juju_le_barbare a écrit a écrit :

 
 
merci à vous tous. Par contre '\n' marche très bien pas besoin du retour chariot '\r' ...
 
@++




 
...ça dépend des contrôles que t'utilises.
ça coute rien et c plus sur de le mettre !

juju_le_barbare

kizkoool a écrit a écrit :

 
Ce que je fais, c'est passer les variables par adresse (ie: pointeur) si les types de données sont complexes (tableau, structure, etc...) ou si les variables doivent être modifiées par la procédure appelée.  
Sinon, j'utilise un passage par valeur.




 
merci à vous tous. Par contre '\n' marche très bien pas besoin du retour chariot '\r' ...
 
@++

kizkoool

juju_le_barbare a écrit a écrit :

 
Encore une question, j'ai des fonctions qui doivent renvoyer plusieurs résultats. Comme ce n'est pas possible, j'ai dans ce cas
créé plusieurs variables globales, que les fonctions modifient au nécéssaire. C'est une bonne méthode ou ya mieux ?




Ce que je fais, c'est passer les variables par adresse (ie: pointeur) si les types de données sont complexes (tableau, structure, etc...) ou si les variables doivent être modifiées par la procédure appelée.  
Sinon, j'utilise un passage par valeur.
 
PS: Et je confirme, les variables globales, c'est bad :kaola:

El_gringo

juju_le_barbare a écrit a écrit :

 
 
OK mais c'est de type AnsiString, et dans ce cas le '\n' ne représente rien d'autre qu'un caractère du style '|' en gras, mais pas un saut de ligne !
Mais je peux me débrouiller, je voulais juste savoir si il existe pas une solution propre !




 
Et au passage, sous windows, le retour à la ligne, c'est pas \n, mais \r\n

antp

juju_le_barbare a écrit a écrit :

 
 
OK mais c'est de type AnsiString, et dans ce cas le '\n' ne représente rien d'autre qu'un caractère du style '|' en gras, mais pas un saut de ligne !
Mais je peux me débrouiller, je voulais juste savoir si il existe pas une solution propre !




 
C'est juste à l'affichage que ça foire.
Et encore, ça dépend dans quoi tu l'affiches (genre TEdit qui supporte pas les retour de ligne)
Rien à voir avec le fait que ce soit une AnsiString.
cf la méthode que j'ai donné plus haut.

juju_le_barbare

el_gringo a écrit a écrit :

 
 
Comment ça !?
T'as bien déja fait ça, g vu le 2, 3 trucs que t'as déja programmé, t'as déja affiché du texte ds un champ de texte, non !?
ds une list box, sous C++ Builder, y doit falloir utiliser un TListBox (je sais pas, moi j'utilise VC++, ms bon, j'imagine que c ça.
Et comme membre de ta TListBox, tu dois avoir un AddString, ou qqeu comme ça !
 




 
OK mais c'est de type AnsiString, et dans ce cas le '\n' ne représente rien d'autre qu'un caractère du style '|' en gras, mais pas un saut de ligne !
Mais je peux me débrouiller, je voulais juste savoir si il existe pas une solution propre !

smaragdus Les réponses sont en bleu :
 

juju_le_barbare a écrit a écrit :

salut les développeurs !
 
Dites pour une chaîne de caractères, vaut-il-mieux utiliser
char *a;
ou
char *a = new char[255]; ???  <<<
Quelle est la différence ?
Je crois que lorsqu'on choisit la 2eme solution, on peut modifier la chaîne avec strcpy();  
 
Un pointeur char* a pointe sur une zone mémoire. Si tu veux y stocker des caractères (ou autre) il faut réserver l'espace mémoire avec new.
 
C'est ça ?
Et je suis obligé de détruire avec delete [] a; ??? OUI
Si je le fais pas la mémoire va rester occupée je me trompe ? C'est grave ? OUI
 
Et pour passer une chaîne de caractères à une fonction, faut-il vraiment passer aussi le nombre d'éléments de ce tableau ? OUI
Pour passer un tableau standard de int par exemples, on doit passer le nombre (avec 'sizeof(a)/sizeof(a[0])') car la fonction
qui le récupère n'a pas de moyen de récupérer le nombre d'éléments du tableau, par contre dans le cas d'une chaine de
caractères, le dernier élément du tableau est '\0' donc la fonction qui récupère la chaîne le sait très bien et lit la chaîne
jusqu'à rencontrer '\0'. Par contre la fonction qui récupère la chaîne peut modifier que jusqu'au rang du '\0', pas plus, c'est ça ?
 
T'as une fonction qui s'appelle strlen qui rend la taille d'une chaine jusqu'au '\0'
 
Et aussi si j'ai besoin de stocker plusieurs chaînes de cractères j'utilise char **a; ? OUI
Mais comment j'utilise l'opérateur new ici ?
Ensuite chaque chaîne c'est a[0], a[1], a[2], ... ???
 

char** tableauDeChaine = NULL;
tableauDeChaine = new char*[nbDeChaine]; // reserve le tableau de pointeurs
tableauDeChaine[0] = new char[tailleDeChaine]; // reserve une chaine
 
La syntaxe du C++ est orthogonal, tu peux faire des tableaux de tableaux de tableaux etc... sur le même principe

 
Encore une question, j'ai des fonctions qui doivent renvoyer plusieurs résultats. Comme ce n'est pas possible, j'ai dans ce cas
créé plusieurs variables globales, que les fonctions modifient au nécéssaire. C'est une bonne méthode ou ya mieux ?
 
LES VARIABLES GLOBALES : C'EST MAL/INTERDIT/SALE/INDEBUGGABLE
 
 
 
juju



antp

juju_le_barbare a écrit a écrit :

 
 
hi hi
encore une question, j'ai une chaîne de caractères sur plusieurs lignes ('\n'), comment l'afficher
sous C++ Builder dans une ListBox par exemple ?




 
Listbox1->Items->Text = chaine;
Items était un TStringList, la propriété Text utilise le retour de ligne comme délimiteur entre les chaînes.

El_gringo

juju_le_barbare a écrit a écrit :

 
 
hi hi
encore une question, j'ai une chaîne de caractères sur plusieurs lignes ('\n'), comment l'afficher
sous C++ Builder dans une ListBox par exemple ?




 
Comment ça !?
T'as bien déja fait ça, g vu le 2, 3 trucs que t'as déja programmé, t'as déja affiché du texte ds un champ de texte, non !?
ds une list box, sous C++ Builder, y doit falloir utiliser un TListBox (je sais pas, moi j'utilise VC++, ms bon, j'imagine que c ça.
Et comme membre de ta TListBox, tu dois avoir un AddString, ou qqeu comme ça !

juju_le_barbare

el_gringo a écrit a écrit :

...et ça voulait faire un défragmenteur ! :sarcastic:  
 :D  :D  :D  




 
hi hi
encore une question, j'ai une chaîne de caractères sur plusieurs lignes ('\n'), comment l'afficher
sous C++ Builder dans une ListBox par exemple ?

El_gringo ...et ça voulait faire un défragmenteur ! :sarcastic:  
 :D  :D  :D
evode des variables globales, C po terrible :p
si t'as po bcp de valeurs, tu peut faires des passages par references :
 
void toto(int in1, int in2, int &ou1, int &out2)
{
out1 = in1;
out2 = in2;
}
 
void pouet()
{
int var1=1;
int var2=2;
int var3=0;
int var4=0;
 
toto(var1, var2, var3, var4);
===> var3 vaut maintenant 1 et var4 vaut 2
antp

juju_le_barbare a écrit a écrit :

 
char *a;
ou
char *a = new char[255]; ???
Quelle est la différence ?




 
le premier c'est un pointeur non initialisé (tu peux pas l'utiliser tant que tu n'y as pas assigné quelque chose)
le second est un pointeur vers 255 octets, pouvant contenir une chaine de 254 caractères + un 0 par exemple.

juju_le_barbare salut les développeurs !
 
Dites pour une chaîne de caractères, vaut-il-mieux utiliser
char *a;
ou
char *a = new char[255]; ???
Quelle est la différence ?
Je crois que lorsqu'on choisit la 2eme solution, on peut modifier la chaîne avec strcpy(); ou bien manuellement avec
a[5] = 'a';, sachant qu'on ne doit pas dépasser 255 caractères, alors que si on n'ititialise pas avec new, a est un pointeur
vers un tableau de 0 éléments, et donc à la moindre tentative d'écriture dans ce tableau on écrase des zones mémoires ...
Ce qui provoque une erreur lors de l'utilisation de strcpy(); par exemple...
C'est ça ?
Et je suis obligé de détruire avec delete [] a; ???
Si je le fais pas la mémoire va rester occupée je me trompe ? C'est grave ?
 
Et pour passer une chaîne de caractères à une fonction, faut-il vraiment passer aussi le nombre d'éléments de ce tableau ?
Pour passer un tableau standard de int par exemples, on doit passer le nombre (avec 'sizeof(a)/sizeof(a[0])') car la fonction
qui le récupère n'a pas de moyen de récupérer le nombre d'éléments du tableau, par contre dans le cas d'une chaine de
caractères, le dernier élément du tableau est '\0' donc la fonction qui récupère la chaîne le sait très bien et lit la chaîne
jusqu'à rencontrer '\0'. Par contre la fonction qui récupère la chaîne peut modifier que jusqu'au rang du '\0', pas plus, c'est ça ?
 
Et aussi si j'ai besoin de stocker plusieurs chaînes de cractères j'utilise char **a; ?
Mais comment j'utilise l'opérateur new ici ?
Ensuite chaque chaîne c'est a[0], a[1], a[2], ... ???
 
Encore une question, j'ai des fonctions qui doivent renvoyer plusieurs résultats. Comme ce n'est pas possible, j'ai dans ce cas
créé plusieurs variables globales, que les fonctions modifient au nécéssaire. C'est une bonne méthode ou ya mieux ?
 
 
Merci de votre aide :hello:
 
juju

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)