web-dev-qa-db-fra.com

quel fichier d'en-tête C ++ déclare strlen?

À 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?

17
user2756494

À 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.

18
Adam Rosenfield

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.

10
MBI

La fonction strlen () est déclarée dans le fichier d'en-tête string.h

à partir de la bibliothèque GNU C

7
slash28cu