2016-05-28 4 views
-1
#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; 
} 

Когда я пытаюсь запустить это я получаю ошибку нижеStrLen() не работает со строкой переменной

||=== 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)) ===| 
+1

попробовать 'STRLEN (b.c_str())' – dgsomerton

+0

это работало, но я хотел бы знать, как это работало –

+6

еще лучше: попробуйте 'с = b.length()' – dgsomerton

ответ

5

strlen является функцией от C и работает со строками C (char *).

Для правильного C++ std::string s используйте функции-члены .length() or .size().

Фактически большинство стандартных заголовков, начинающихся с 'c', включают функции, которые C++ унаследовал от C. В вашем случае у вас, скорее всего, нет причин использовать <cstring>, если вы уже работаете со строками C++.

0

ваш случай будет работать, если вы только что изменили

string b="hello"; 

в

char* b = "hello"; 

отметить, что строки C всегда (должны) иметь нулевой символ «\ 0», который определяет, что конец строки. Это объясняется кратко, например here

+1

Вы наверняка имели в виду, что строки C должны быть прерваны '' \ 0'' не '' \ n''. – cwschmidt

+0

@cwschmidt aha, вы чертовски правы: D Я должен, вероятно, поспать – Peregrin

+0

также 'const char * b' вместо' char * b'. – coyotte508

Смежные вопросы