À quelle bibliothèque appartient strlen()
?
Appartient-il à cstring
? ou string
?
J'ai essayé le code suivant, et cela fonctionne:
include <iostream>
using namespace std;
//withou include<string.h>
int main() {
char * str="abc";
cout<<strlen(str);
}
Je mets str
égal à 3 et donne la bonne réponse 3.
Pourquoi cela fonctionne-t-il sans inclure de chaîne de bibliothèque ou de chaîne de caractères?
Dois-je y inclure cstring ou string? string.h?
À quelle bibliothèque appartient strlen ()? Appartient-il à cstring? ou chaîne?
Ni. cstring
et string
ne sont pas bibliothèques , ce sont fichiers d'en-tête qui définissent l'interface vers diverses fonctions et classes.
La norme du langage C indique que la fonction strlen
est déclarée dans le fichier d'en-tête <string.h>
. En C++, y compris <string.h>
place strlen
dans l'espace de noms global, tout en incluant <cstring>
place à la place strlen
dans l'espace de noms std
.
L'implémentation réelle de la fonction strlen
se trouve dans la bibliothèque standard C (aka libc
ou CRT
sur certaines plateformes). Habituellement, cela est lié à votre exécutable au moment de la liaison.
Pourquoi cela fonctionne sans inclure de chaîne de bibliothèque ou de chaîne de caractères?
Dans votre compilateur et votre chaîne d'outils, il se trouve que le fichier d'en-tête <iostream>
comprend <cstring>
, ce qui signifie que tout code qui inclut le premier obtient également le second gratuitement. Il s'agit d'un détail de l'implémentation et il ne faut pas s'y fier - si vous compilez votre code avec un autre compilateur, vous pouvez soudainement vous retrouver dans un océan d'erreurs de compilateur.
La bonne chose à faire est également d'inclure <cstring>
ici; même si ce n'est pas nécessaire avec votre compilateur particulier, cela peut être nécessaire avec d'autres compilateurs.
Pour utiliser strlen (), vous devez inclure le fichier d'en-tête cstring.
#include <cstring>
C'était la réponse que je cherchais, mais je n'ai pas trouvé de réponse directe ici.
La fonction strlen () est déclarée dans le fichier d'en-tête string.h