begin process at 2012 05 28 16:02:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

char * et string


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

char * et string

mercredi 8 juin 2005 à 15:57:45 | char * et string

darfeuille

Voila, je suis tout nouveau ici (qu'une semaine, mais j'essaie d'etre actif :p)

Mais je me pose une question :
  Ca fait longtemps que je n'utilise plus de char*, parce que les string m'ont paru vraiment plus simples d'usages, moins sujet a problemes et plus "libres". Je pensais donc que c'était la norme, pendant que j'étais enfermé à programmer dans mon coin.

Toutefois, depuis une semaine que je suis la, je remarque que ce n'est, contrairement a ce que je pensais, pas la norme. Au contraire, j'ai l"impression d'être un des seuls a m'en servir.

Pouvez vous m'expliquer cela? histoire de savoir si c'est juste une histoire d'habitude, ou si c'est parce que string pose des problèmes.
Sachant que j'ai comparé (tests valables) les vitesses de mêmes opérations en char* et en string, et c'est quiff-quiff.

Merci, Darfeuille

mercredi 8 juin 2005 à 16:07:49 | Re : char * et string

BruNews

Administrateur CodeS-SourceS
NENNI pour le 'quiff-quiff', tests à refaire sur gros traitements et tu changeras d'avis.

ciao...
BruNews, MVP VC++
mercredi 8 juin 2005 à 16:10:49 | Re : char * et string

ymca2003

Réponse acceptée !
Les string n'existent pas en C, seulement en C++ et donc les sources C utilisent que les char*. Et par habitude, certains (dont moi) utilise les char* aussi en C++. Ensuite les APIs Windows ne connaissent pas les string et seulement les char* (ou LPSTR)
mercredi 8 juin 2005 à 16:25:16 | Re : char * et string

darfeuille

Ok, merci
BruNews, je vais refaire mes tests alors, pour verifier. je les avais fait sur un prog qui parse des fichiers de + 1GO mais g du me planter alors (j'obtenais 1.5% de temps de traitement lié aux string en plus, ces 1.5% faisant, sur le programme de parsing total, 1.1% a peu pres (73% du temps cpu etant du aux traitement sur ceux-ci)
J'ai surement du me planter quelque part

mercredi 8 juin 2005 à 16:34:14 | Re : char * et string

cosmobob

salut;
non tu t'es pas planté, tout dépend comment sont utilisés les std::string, mais les template de la STL sont très optimisés.
par ex: les allocations de memoire sont réduites au minimum (la meme chaine en memoire peut etre reférencée par plusieurs strings), et la comparaison entre deux string est en général plus rapide que l'équivalent strcmp du C (tout simplement parce que la taille des strings est connue avant le parcours de la chaine de caractere, ce qui peut eviter des parcours inutiles en cas de tailles différentes...).
Si tu te sers correctement de resize ou reserve tu peux arriver a un ecart de temps avec les char* du C tres tres faible.

a+

mercredi 8 juin 2005 à 16:42:46 | Re : char * et string

cosmobob

Réponse acceptée !
en tout cas si tu veux faire du c++ (avec un code plus lisible et plus facilement evolutif), prefere les std::string au char*. Tu peux de toutes manieres convertir si besoin est (dans le cas d'appel aux API windows) un std::string en char* avec la methode c_str().
90% des bugs en C sont dus a une mauvaise utilisation des char* et des pointeurs en général, et la tres grande majorité des failles de sécurité des programmes ou des systemes d'exploitation (windows et unix) sont dus a des buffer overrun qui traduisent une mauvaise utilisation des pointeurs.
C : gain en performance qd le code est écrit pour ca / problèmes de fuites de mémoires des que le prog devient important
C++ : bonnes performances si le code est optimisé dans les passages critiques, mais code beaucoup plus robuste, stable, et dont le cout de maintenance est beaucoup plus faible.
Problèmes de fuites de mémoire qd le code est mal concu (plus facile a eviter qu'en C)

mercredi 8 juin 2005 à 16:48:35 | Re : char * et string

darfeuille

Ok, merci

Ca expliquerait alors peut etre pourquoi la diff sur mon prog est faible.

Tiens, j'en profite pour poser une aute question :
Mettons que j'ai une structure de la STL (au hasard un set), qui a été rempli au fur et a mesure du programme, et qu'a un moment je n'en ai plus besoin.

Est ce que faire monset.resize(0) suffit a libérer la mémoire des éléments qu'il contenait, ou est ce qu'il faut faire autre chose? (sachant que c'est au milieu d'un programme, donc monset existe toujours ensuite)


mercredi 8 juin 2005 à 16:52:44 | Re : char * et string

vecchio56

Administrateur CodeS-SourceS
En général il y a une méthode clear pour vider les conteneurs.
Pour revenir au string, je pense que le principal avantage est que a tout moment elles connaissent leur taille, ce qui est très utile (concaténation par exemple).



Cette discussion est classée dans : string, char, pose, semaine, pensais


Répondre à ce message

Sujets en rapport avec ce message

AnsiString et Char [ par JCLK ] J'ai un leger probleme :je recupere une String et j'ai ensuite besoin de la transformer en char *Est-ce possible ?La String contient un path ("C:\...\ tableau de char -> string [ par alfred289 ] bonjour,j'utilise BOrland C++ builder 5 et j'essaie de transformer un tableau de caractères en sring et je trouve pas commentmerci de votre aide operator [] ds une classe string pr retourner un caractère [ par ngryman ] Salut à ts,voilà j'ai un petit souci ds une classe String que j'ai fait. J'ai inclu un opérateur [] qui comme un char* retourne le char à la position Convertir une string en char* [ par dickymoe ] Existe-t-il une fonction qui permet de convertir une string en char* ?ou alors une fonction qui compare deux string sans respecté la casse ???Merci(en Probleme converssion [ par zzzzzz ] <img src=/imgs2 Probleme malloc [ par zzzzzz ] <img src=/imgs2 Convertion d'une string en char [ par redpooka ] Voici avec ce programme ca n'affiche juste le premier charactère comment faire pour qu'il affiche toute la chaine de caracètre ?Merci#include <iostre problème d'allocation mémoire dans ma classe [ par Bub325 ] Salut, j'ai un problème dans le code suivant au niveau de l'allocation mémoire de tmp.a = new char... dans operator+, et je ne sait pas du tout pourqu Visual C++ Free() [ par PRZYBYLSKI ] #include #include #include "stdafx.h"Question au Pro?Qu'es qui est faux docteurArrivé à free ça bombe#include <io convertir un String* en char [ par mimyne ] Bonjour a tous malgrès toute les fonctions que g essayé je n'arrive pas a convertir un string* en char s'il y a qqun qui pourrait me renseigner je su


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales