Je ne penserais pas vraiment à la string.h
comme des fonctions de "mémoire". Je les considérerais plutôt comme des fonctions "tableau", puisqu'elles opèrent sur les données contenues dans les séquences de la mémoire. En revanche, malloc
(et d'autres), fournissent en fait des services de mémoire tels que l'allocation, plutôt que la manipulation des données dans une région de la mémoire.
En particulier, les fonctions dans string.h
ne s'occupent pas de l'allocation ou de la désallocation de la mémoire, ni d'aucune forme de gestion de la mémoire. Même une fonction comme char * strerror(int)
qui semble créer une toute nouvelle chaîne de caractères, n'effectue aucune allocation, car la valeur de retour est en fait une chaîne de caractères allouée statiquement. Les autres fonctions peuvent renvoyer un pointeur vers un bloc de mémoire, mais il s'agit en fait d'un de leurs paramètres (par ex. memcpy
). Ou ils renvoient un pointeur vers le début d'une sous-chaîne ( strtok
), ou un nombre entier représentant une comparaison ( memcmp
).
D'un autre côté, stdlib.h
n'est pas non plus vraiment une question de mémoire. La conception de stdlib.h
est de fournir des opérations générales dont un grand nombre de programmes auront probablement besoin. Les fonctions de mémoire ne sont que des exemples de ces opérations fondamentales. Cependant, d'autres fonctions comme exit
y system
sont également de bons exemples, mais ne s'appliquent pas à la mémoire.
Maintenant, il y a quelques fonctions dans stdlib.h
que l'OMI aurait pu placer dans string.h
notamment les différentes fonctions de conversion ( mbstowcs
, wcstombs
, atoi
, strtod
etc.), et peut-être même le bsearch
y qsort
fonctions. Ces fonctions suivent les mêmes principes que les string.h
(elles opèrent sur des tableaux, ne retournent pas les blocs de mémoire nouvellement alloués, etc).
Mais d'un point de vue pratique, même si cela avait beaucoup de sens de combiner les mem*
avec les fonctions malloc
, realloc
, calloc
y free
la bibliothèque standard de C est jamais va être réorganisé de la sorte. Un tel changement casserait définitivement le code. Aussi, stdlib.h
y string.h
existent depuis si longtemps, et sont toutes deux des bibliothèques si utiles et fondamentales, que les modifications apportées briseraient probablement la plupart (ou du moins, une grande partie) du code C.