Я бы не думал, что функции string.h
являются функциями "памяти". Вместо этого я думал бы о них как о функциях «массива», поскольку они работают с данными, содержащимися в последовательностях памяти. Напротив, malloc
(и другие) фактически предоставляют услуги памяти, такие как выделение, а не манипулирование данными в области памяти.
В частности, функции в string.h
не заботятся о каком-либо выделении или освобождении памяти или какой-либо форме управления памятью. Даже такая функция, как char * strerror(int)
, которая, кажется, создает целую новую строку, не выполняет никаких выделений, потому что возвращаемое значение на самом деле является статически размещаемой строкой. Другие функции могут возвращать указатель на блок памяти, но на самом деле это только один из их параметров (например, memcpy
). Или они возвращают указатель на начало подстроки (strtok
) или целое число, представляющее сравнение (memcmp
).
С другой стороны, stdlib.h
также не относится к памяти. План stdlib.h
предназначен для обеспечения операций общего назначения, которые могут понадобиться большому количеству программ. Функции памяти просто являются примерами таких фундаментальных операций. Тем не менее, другие функции, такие как exit
и system
, также являются хорошими примерами, но не применимы к памяти.
Теперь в stdlib.h
есть некоторые функции, которые IMO мог бы поместить в string.h
, в частности, различные функции преобразования (mbstowcs
, wcstombs
, atoi
, strtod
и т. Д.) И возможно даже функции bsearch
и qsort
. Эти функции следуют тем же принципам, что и функции string.h
(они работают с массивами, не возвращают вновь выделенные блоки памяти и т. Д.).
Но с практической точки зрения, даже если имеет смысл объединить функции mem*
с функциями malloc
, realloc
, calloc
и free
, стандартная библиотека C равна никогда не будет так реорганизован. Такое изменение определенно нарушит код. Кроме того, stdlib.h
и string.h
существуют уже так давно и являются настолько полезными и фундаментальными библиотеками, что изменения, вероятно, нарушат большую часть (или, по крайней мере, большую часть) кода C.