Ca dépend des cas bien entendu. Mais quand tu as, par exemple, 4 ou 5 char* que tu dois concaténer, tu peux facilement obtenir leurs tailles et les additionner. C'est très mineur évidemment...
Edit: en réponse au message d'Arzar, que je viens de voir, on pourrait simplement imaginer cette solution écrite à la va-vite:
Ou si tu préfères la version fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { const char* str1 = "Hello"; const char* str2 = " "; const char* str3 = "World !"; int len1 = strlen(str1); int len2 = strlen(str2); int len3 = strlen(str3); char* strConcat = malloc(len1 + len2 + len3 + 1); char* ptr = strConcat; memcpy(ptr, str1, len1); ptr += len1; memcpy(ptr, str2, len2); ptr += len2; memcpy(ptr, str3, len3); ptr[len3] = '\0'; printf("%s\n", strConcat); return 0; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 char* concat(const char** array, int size) { int lengths[size]; int total = 0; int cur; int i; char* result; char* ptr; for(i = 0; i < size; ++i) { cur = strlen(array[i]); lengths[i] = strlen(array[i]); total += cur; } result = malloc(total + 1); for(i = 0, ptr=result; i < size; ++i) { memcpy(ptr, array[i], lengths[i]); ptr += lengths[i]; } *ptr = '\0'; return result; } int main(void) { const char* array[4] = { "Hello", " ", "World", " !" }; char* result = concat(array, 4); printf("%s\n", result); free(result); return 0; }Si si, je les connais Mais je leur reproche de faire une allocation à chaque concaténation.Peut être simplement les opérateurs + et += redéfinis pour la classe string, qui fonctionnent aussi très bien avec des char*
Ah, je ne savais pas que c'était en 2 packages... Y a-t-il un lien qui me permette de savoir quoi appartient à quoi ?Fais déjà attention à la différence (effectivement subtile) qui existe entre la SL (qui contient entre autre la classe string) et la STL qui manipule les modèle
Mais on dit souvent que la stl est plus lourde à l'exécution, vu qu'elle doit être robuste et servir à tout usage. Est-ce vrai, ou sont-ce des rumeurs stupides de détracteurs du Cpp ?Je n'ai, à mon grand dam, encore jamais eu l'occasion de travailler dans l'embarqué, mais, en théorie, l'utilisation des modèles ne devrait pas vraiment avoir d'impact particulier par rapport à une structure identique "classsique" étant donné que tout est fait au moment de la compilation...
Je serais d'ailleurs intéressé par un lien détaillant le fonctionnement interne des types de la stl.
Il n'y a pas grandes différences à première vue, si ce n'est les restrictions de mémoire, de puissance de calcul, de set d'opération (cpu de type risc), et surement d'autres choses dont je n'ai même pas idée.La bonne question étant de savoir si, effectivement, la structure même des collections de la STL sont intéressante en embarqué... et, sur ce point, je ne suis pas en mesure de faire ma propre idée
Cela dit, je suis jeune développeur, et ça fait fort peu de temps que je bosse dans les systèmes embarqués. J'en connais trop peu pour pouvoir dire si oui ou non la structure de la stl est appropriée. Il est possible que je fasse complètement fausse route. Si c'est le cas j'apprécierais grandement que quelqu'un me remette sur la bonne voie
Partager