Le C, de base ne propose aucune gestion des chaine de caractères. Seule la librairie standard propose quelques fonctions qui reposent sur la convention de terminer les chaine par le caractère nul, convention qui à étée reprise par énormément de programme.
Le C est un langage bas niveau qui te laisse le choix de la manière dont tu code tes chaines de caractère, rien ne t'empeche d'utiliser une structure telle que : struct string {
size_t length;
char data[];
}
qui est du C tout aussi standard que les chaine terminé par nul. Et tu trouvera plein de bibliothèques qui te le proposent avec beaucoup de variantes dans les représentations.
C'est toute la puissance du C, tu n'est pas limité par un modèle, tu fais ce que tu veux. C'est aussi là, sa plus grande faiblesse, car, à donner trop de libertées, les gens font n'importe quoi.
Si ton programme nécessite d'avoir souvent accès à la longueur de la chaine, une représentation qui la concerve de manière explicite est parfaitement adapté. Mais si ton programme ce contente de faire des parcours de chaine relativement petites mais en grand nombre, le marqueur de fin est plus adapté, car le surcout est réduit.
Pour te paraphraser, la mémoire la moins gachée est celle qui est vraiment utilisée, donc si tu n'as que très rarrement besoin de la longueur d'une chaine, autant ne pas la stocker et la calculer juste une fois de temps en temps.
Le principal soucis est le design de la lib standard du C, elle à le cul entre deux chaise :
- d'un côté ils l'on voulut minimaliste et comptait sur tous les bibliothèques disponibles autour pour fournir l'éssentiel ;
- de l'autre, ils ont quand même mits dedans d'un fonctions qui sont trivialement codable en C pour gérer les chaines d'une manière qui n'est corecte que dans certains cas.
Ça à deux conséquences :
- puisque les bases sont disponibles, la convention adoptée par ces bases est utilisée trop souvent, et n'importe comment, plutot que d'aller chercher une bonne lib adaptée au programme ;
- puisque seule les bases sont disponibles, les programmeur recodent à chaque fois pleins de fonctions manquantes et multiplient les risques de bugs.
[^] # Re: Humm...
Posté par beagf . En réponse à la dépêche Sortie de la version 2.11 de la bibliothèque standard C GNU (glibc). Évalué à 8.
Le C est un langage bas niveau qui te laisse le choix de la manière dont tu code tes chaines de caractère, rien ne t'empeche d'utiliser une structure telle que :
struct string {size_t length;
char data[];
}
qui est du C tout aussi standard que les chaine terminé par nul. Et tu trouvera plein de bibliothèques qui te le proposent avec beaucoup de variantes dans les représentations.
C'est toute la puissance du C, tu n'est pas limité par un modèle, tu fais ce que tu veux. C'est aussi là, sa plus grande faiblesse, car, à donner trop de libertées, les gens font n'importe quoi.
Si ton programme nécessite d'avoir souvent accès à la longueur de la chaine, une représentation qui la concerve de manière explicite est parfaitement adapté. Mais si ton programme ce contente de faire des parcours de chaine relativement petites mais en grand nombre, le marqueur de fin est plus adapté, car le surcout est réduit.
Pour te paraphraser, la mémoire la moins gachée est celle qui est vraiment utilisée, donc si tu n'as que très rarrement besoin de la longueur d'une chaine, autant ne pas la stocker et la calculer juste une fois de temps en temps.
Le principal soucis est le design de la lib standard du C, elle à le cul entre deux chaise :
- d'un côté ils l'on voulut minimaliste et comptait sur tous les bibliothèques disponibles autour pour fournir l'éssentiel ;
- de l'autre, ils ont quand même mits dedans d'un fonctions qui sont trivialement codable en C pour gérer les chaines d'une manière qui n'est corecte que dans certains cas.
Ça à deux conséquences :
- puisque les bases sont disponibles, la convention adoptée par ces bases est utilisée trop souvent, et n'importe comment, plutot que d'aller chercher une bonne lib adaptée au programme ;
- puisque seule les bases sont disponibles, les programmeur recodent à chaque fois pleins de fonctions manquantes et multiplient les risques de bugs.