Du char* au string: comment les pièges du c sont résolus en c++

Soyez le premier à donner votre avis sur cette source.

Vue 5 620 fois - Téléchargée 542 fois

Description

les char* sont pleins de pièges, ils nous posent des "colles" tous les jours
Voici un recueil des principaux problèmes et leurs solutions.
Ceci est destiné au développeur C (partie I) et au développeur C++ (parties I et II)

Devenez des experts "es chaîne" !

Source / Exemple :


Voici les items traités, la table des matières quoi !

Du char* au string					1
Table des Matières					2
Partie I : rappels de 'C'				3
Désagrément 1 : la chaîne n'est pas vraiment déclarée ni simplement représentée par une variable				3
Désagrément 2 : les chaînes ne peuvent pas « facilement » être modifiées		6
Désagrément 3 : les chaînes ne peuvent pas facilement être concaténées		8
Désagrément 4 : la chaîne ne connaît pas sa longueur + la chaîne ne peut pas facilement comprendre des caractères nuls		9
Désagrément 5 : attention aux effets de bord communs avec les pointeurs						10
Autres ...						10
Partie II : les avancées du 'C++'				11
Avantage 1 : chaque string est un objet			11
Avantage 2 : modifications sur place			12
Avantage 3 : concaténation				12
Avantage 4 : la chaîne connaît sa longueur et elle peut comprendre des caractères nuls					13
Avantage 5 : pas d'effet de bord dû à l'utilisation des pointeurs	15
Oui mais est ce bien aussi simple ?			16
Un conseil pour performances : soyez conscient de la capacité et maîtrisez la		17
Une petite question pour finir :				19
Partie III : Et maintenant le code				20

Conclusion :


vous trouverez le code ainsi qu'un explicatif sous forme de fichier PDF dans le ZIP

modifié : p5 char* const en const char*

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
121
Date d'inscription
mercredi 26 octobre 2005
Statut
Membre
Dernière intervention
14 mars 2009
1
Pas mal, à part quelques passages de codes dans le PDF qui sont un peu illisibles...
Du char-abia, quoi.
(Désolé, j'ai pas pu me retenir ^^);
Messages postés
1
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
7 février 2005

Bonjour, je suis une newbie de chez newbie. J'ai voulu télécharger les documents mais je n'ai pas réussi :(
Messages postés
35
Date d'inscription
lundi 6 janvier 2003
Statut
Membre
Dernière intervention
12 novembre 2004

Le document pdf dans le zip est très intéressant.
La présentation est sérieuse avec de l'humour ce qui ne gâte rien. Elle incite à l'utilisation de l'objet standard du C++, STRING.

Sur Deuxième partie C++, j'ajouterais par rapport au document et aux commentaires :
- Il ya un point important sur lequel il faut mettre l'accent : Le couplage string et flux de données avec les opérateurs >> et << qui facilitent la programmation. Il est tellement naturel que dans le document cela n'a pas été suffisamment signalé, de mon point de vue.
- J'ajouterai pour être complet que string dispose de « pointeurs intelligents qui offrent à la fois de la sécurité et du service » : les itérateurs. D'ailleurs ils sont mis en ?uvre pour utiliser la fonction algorithm « replace() » et traverser la chaîne str2 à la page 12.
- On pourrait ajouter qu'il existe un flux de données « iostringstream » qui apporte de véritables services pour effectuer les conversions de type. Souvent les programmateur C++ butent sur ces problèmes alors qu'un objet est disponible en standard pour assurer la gestion des flux chaîne et les formater.

Aux programmeurs C++ ouvrez le zip lisez le pdf.

Il y a un débat entre C et C++ dans les commentaires qui, d'après moi, n'a pas lieu d'être.
Soyons positifs : Que ceux qui font du C le fassent bien et que ceux qui font de l'objet avec C++ en fassent de même.
Messages postés
455
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
6 avril 2004
8
y en a qui construisent ... y en a qui cherchent à casser.
je vois que tu n'a pas compris grand chose mais ce n'est pas une raison pour polluer négativement le site. (Relis les explications et teste les correctement : le code est fourni)
Etre contre les conventions standards qui consistent à préfixer par 'p' les variables de type pointeur est un choix personnel...
Attention quand tu traite d'allocation dynamique le char * p="abc"; (c'est du statique => donc tout à fait l'opposé!)
ou est donc le new? le malloc?
le problème du multi-référencement de zone mémoire, de l'optimisation (comptage de références,etc...) est très courant dans les gros logiciels... il faut donc en tenir compte (Aliassing et savoir le gérer)
Quand à mettre des 0 binaires dans une chaîne, ils y sont très souvent lorsque l'on traite des fichiers ... binaires et il faut savoir les traiter. (exemple Algorithmes de cryptage/compression/sérialisation/...)
Un char p[] est alloué sur la pile et donc libéré automatiquement en sortie de bloc... l'article ne dit pas le contraire
Merci quand même pour m'avoir fait remarqué l'emploi erroné p5 (sur 24) de char*const (j'ai modifié le pdf)
Mais contrairement à ce que tu dis un char* const EXISTE bien ! c'est un pointeur constant
alors que const char* signifie pointeur sur constante
Messages postés
71
Date d'inscription
dimanche 23 juin 2002
Statut
Membre
Dernière intervention
1 février 2008

mince les slash 0 ne marchent pas ici ! Bon je vous indique où ils manquent, dans le paragraphe 1 du deuxième commentaire, en mettant un anti-slash a la place :
string s("abc/0def",7);
(quoique faut vraiment etre tordu pour mettre un /0 dans une chaine)
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.