3
#include <iostream>
#include <string>
#include <cstring>


using namespace std;

int main()
{
    string b="hello";

    cout<<b;

    int c = strlen(b);

    cout << "Hello world!" <<c<< endl;
    return 0;
}

When I try to run this I get the error below

||=== Build: Debug in strlen (compiler: GNU GCC Compiler) ===|
C:\Users\Waters\Desktop\hellow world\strlen\main.cpp||In function 'int main()':|
C:\Users\Waters\Desktop\hellow world\strlen\main.cpp|14|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*' for argument '1' to 'size_t strlen(const char*)'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Zong
  • 6,160
  • 5
  • 32
  • 46
Waters Sharma
  • 68
  • 1
  • 2
  • 11

2 Answers2

9

strlen is a function from C and works with C strings (char *).

For proper C++ std::strings use the .length() or .size() member functions.

In fact most standard headers that start with 'c' include functions that C++ inherited from C. In your case you most likely don't have any reason to use <cstring> if you're already working with C++ strings.

AliciaBytes
  • 7,300
  • 6
  • 36
  • 47
0

your case will work if you just changed

string b="hello";

to

char* b = "hello";

note that C strings always (should) have null character '\0' that determines that end of the string. It's explained briefly for example here

Peregrin
  • 424
  • 4
  • 11