2013-03-16 3 views
-7

null로 끝나는 문자열의 크기를 얻는 방법이 있습니까?cstring의 크기 얻기

Ex.

char* buffer = "an example"; 

unsigned int buffer_size; // I want to get the size of 'buffer' 
+0

네, 그게 사소한 일입니다. 당신은 분명히 구글을 시도하지 않았다. –

답변

6

공지있다. 당신이 전달하는 문자열의 길이를 반환하고 char*로의 전환은 (즉, 포인터 const을이 비) 불법입니다. 이 말했다 :

#include <cstring> // You will need this for strlen() 
#include <iostream> 

int main() 
{ 
    char const* buffer = "an example"; 
    // ^^^^^ 
    std::cout << std::strlen(buffer); 
} 

그러나 C를 C를 작성 ++와하지 않을 때문에, 당신은 C++ 표준 라이브러리에서 클래스와 알고리즘을 사용한다 (적어도이 태그 주장은 무엇인가) :

#include <string> // You will need this for std::string 
#include <iostream> 

int main() 
{ 
    std::string buffer = "an example"; 
    std::cout << buffer.length(); 
} 

live example을 참조하십시오.

참고 : 당신이 그것을 사용하는 API가있는 경우

는 C-문자열이 필요합니다, 당신은 당신이 c_str를 사용할 수 있습니다에 char const* 포인터를 검색 할 std::string 개체의 c_str() 멤버 함수를 사용할 수 있습니다() 멤버 함수는 std :: string 개체 메모리 버퍼에 캡슐화 된 C 문자열을 포함합니다. 버퍼의 내용을 수정할 수 없다는 사실을 기억하십시오.

std::string s = "Hello World!"; 
char const* cstr = s.c_str(); 
+0

좋습니다. 감사합니다. 나는 실제로 응용 프로그램을 작성하고있어 cstrings을 사용해야합니까? –

+0

@ anon666 : 아니요, 필요하지 않습니다. 그리고'std :: string' 객체의'c_str()'멤버 함수를 사용하여 캡슐화 된 C 문자열을 포함하는 메모리 버퍼 인 char const * 포인터를 얻을 수 있습니다. 해당 버퍼의 내용을 수정할 수 없다는 사실을 기억하십시오. –

+0

나는 왜 당신이 const 일을 가져 왔는지 확신하지 못합니다. 비 const'char *'를'strlen()'에 건네도 괜찮습니다. –

3

<cstring>에서 strlen(buffer)을보십시오. 그것은 문자 그대로 C++ 11 문자열 const char[]을 입력있다

+0

Thanks @ David. 나는 포함을 잊었다. :) – hvanbrug

+0

감사합니다. 표준 clib에서 어떤 기능이 있는지 생각하지 않았습니다. –