Différence entre <cstring> et <string>

Plus tôt aujourd'hui (en fait, hier, à cause de mon fuseau horaire), j'ai été de tenter de programmation entrevue à l'aide d' Visual Studio 2012 pour C++ sur l'Entretien de la Rue (qui utilise g++).

Pour être bref, je suis tombé sur plusieurs erreurs de compilation1 quand j'ai été en utilisant

#include <cstring>

qui a été fourni par le squelette de code dans un de la question, et après la mise à

#include <string>

toutes les erreurs de compilation comme par magie disparu.

Cependant, lors de la présentation à l'Interview de la Rue, j'ai dû ajouter c dos, sinon j'ai des erreurs de compilation.

C'était la première fois que j'ai été mordu par des non-normalisation....

Ma question est: est ce que à l'intérieur de <string> et <cstring> m'a pris (précieux) plus d'une demi-heure?


1 Pour quelqu'un qui est curieux:

Une erreur par Visual Studio 2012 si using <cstring> est:

erreur C2338: La Norme C++ n'est pas un hash de ce type.

dans

c:\program files (x86)\microsoft visual studio 11.0\vc\include\xstddef

peut-être pour string clé dans unordered_map

Une erreur par g++ si using <string> est:

'strlen' n'a pas été déclarée dans ce cadre