2010-02-13 2 views
4

quelqu'un pourrait expliquer pourquoi je reçois cette erreur quand je suis la compilation de la source à l'aide g suivant ++ compilateurobtenir la longueur d'un tableau à l'aide strlen dans le compilateur g ++

#include <cstdio> 
#include <string> 

using namespace std; 

int main() 
{ 
    char source_language[50]; 


    scanf("%16s\n",source_language); 

    int length = sizeof(source_language); 
    int sizeofchar = strlen(source_language); 
    printf("%d\n",sizeofchar); 
} 

cela me donne l'erreur suivante

essai cpp: en fonction 'int main()':

test.cpp: 31: erreur: 'strlen' n'a pas été déclaré dans ce champ

quand je change le #include <string> en #include <string.h> ou #include<cstring>, cela fonctionne très bien, je dois comprendre quelle est la différence en utilisant #include<string> et #include<string.h>. vraiment apprécier toute aide

+2

Pouvez-vous éditer la question pour plus de clarté? "quand je change #include en #incu ou #include" il manque quelques informations, je pense. –

+0

ok, fait, merci de l'avoir montré – KItis

Répondre

7

programmeurs C++ doivent normalement faire face à au moins 2 saveurs de la chaîne: les chaînes de style C premières, généralement déclarés comme char *str; ou char str[123];, qui peut être manipulé avec strlen() etc .; et les chaînes de style C++, qui ont le type std::string et sont manipulées avec des fonctions membres comme string::length(). Malheureusement, cela conduit à un peu de confusion.

  • En C, #include <string.h> déclare strlen() et al.
  • En C++, vous avez besoin #include <cstring> place, qui les déclare dans l'espace de noms std, de sorte que vous pouvez appeler ces fonctions std::strlen() etc. ou vous devez suivre avec using namespace std;, auquel cas vous pouvez les appeler comme strlen() etc. comme d'habitude.
  • C++ également a un en-tête totalement séparé appelé <string>, qui déclare le type C++ std::string. Cet en-tête n'a rien à voir avec strlen(), donc il ne vous permettra pas d'accéder à strlen().

Je ne sais pas pourquoi Mehrdad Afshari a supprimé sa réponse, que je répète essentiellement ici.

13

Vous essayez d'utiliser la fonction strlen, qui est déclarée dans string.h (ou, en tant que membre de l'espace de noms std dans cstring). Donc, pour utiliser strlen, vous devez inclure l'un de ces deux en-têtes.

La variante #include <string> ne fonctionne pas simplement parce que string est un sans aucun rapport C++ - fichier d'en-tête spécifique qui n'a absolument rien à voir avec les fonctions de chaîne de la bibliothèque standard C. Qu'est-ce qui vous a fait espérer que cela fonctionnera?

Questions connexes