could someone explain why i am getting this error when i am compiling the source using following g++ compiler
#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);
}
this gives me following error
test.cpp: In function ‘int main()’:
test.cpp:31: error: ‘strlen’ was not declared in this scope
when i change the #include <string>
into #include <string.h>
or #include<cstring>
, it works fine, i need to figure out what is the difference using #include<string>
and #include<string.h>
. really appreciate any help
C++ programmers normally have to deal with at least 2 flavours of string: raw C-style strings, usually declared as char *str;
or char str[123];
, which can be manipulated with strlen()
etc.; and C++-style strings, which have the type std::string
and are manipulated with member functions like string::length()
. Unfortunately this leads to a bit of confusion.
#include <string.h>
declares strlen()
et al.#include <cstring>
instead, which declares them in the std
namespace, so you can either call these functions as std::strlen()
etc. or you need to follow up with using namespace std;
, in which case you can then just call them as strlen()
etc. as usual.<string>
, which declares the C++ type std::string
. This header has nothing to do with strlen()
, so including it will not let you access strlen()
.I don't know why Mehrdad Afshari deleted his answer, which I'm essentially repeating here.