2016-08-17 4 views
-2

필자는 문자열 배열을 가지고 있으며 각 구성 문자열의 길이를 알고 싶습니다. 모든 문자열은 길이가 다르지만 컴파일러는 모두 동일한 크기로 표시합니다. 누구나 왜 그런 일이 일어날 수 있는지 설명 할 수 있습니까? 다음은 코드입니다 :C++에서 문자열 배열의 각 문자열이 같은 크기를 갖는 이유는 무엇입니까?

string arr[] = {"ACACACZCZCZC", "LOQWABCB", "PTUTCFEBC"}; 
int n = sizeof(arr)/sizeof(arr[0]); 
cout<<"number of strings is "<<n<<endl; 
cout<<"individual size of strings: str1 = "<<sizeof(arr[0])<<", str2 = "<<sizeof(arr[1])<<", str3 = "<<sizeof(arr[2])<<endl; 

이는 8

+1

실제로 각 문자열의 문자 수를 초과하는 경우'arr [0] .length()'또는'arr [0] .size()를 사용하지 않겠습니까? – CoryKramer

+0

당신은 또한 [strlen()] (http://www.cplusplus.com/reference/cstring/strlen/)을 사용할 수 있습니다. –

+0

@CoryKramer 시도해 보았지만 이제는 가변 길이를 보여줍니다. 감사. 그런데 왜 모든 문자열이 같은 공간을 차지합니까? (8 바이트). 큰 문자열이 더 많은 공간을 차지해야하지 않습니까? 어떤 아이디어가 여기에 ?? –

답변

1

sizeof(arr[0]) 모든 문자열의 크기가 발생하면 정적 유형에 따라 std::string객체의 크기를 바이트 단위로 제공합니다.

문자열의 길이를 알고 싶다면 std::string::size()과 같이 arr[0].size()을 사용하십시오.

+0

하지만 어떤 문자열의 길이를 늘려도 40이라고하면 여전히 크기가 8로 표시됩니다. 길이가 늘어 나면 공간이 늘어나므로 늘어나지 않을까요? –

+0

Nope. 'std :: string' 구조체는 아마 데이터 버퍼에 포인터 *를 가지고 포인터의 크기는 포인터가 가리키는 버퍼에 의존하지 않습니다. – Bathsheba

2

sizeof(x) 크기는 객체 x입니다. 이는 객체에 의해 잠재적으로 관리되는 리소스의 크기와 아무 관련이 없습니다. 이 모든 것은 std::string 개체가 8 바이트로 구성된다는 것을 알려줍니다. 아마도 두 포인터.

arr[0].size() 
+0

@AnkitGupta : 가장 유용한 것으로 밝혀진 경우이 대답을 수락하는 것을 잊지 마십시오 (어느 IMHO인지). – Bathsheba

0

sizeof T이 유형 T의 크기를 바이트 단위로 반환하는 컴파일 타임 평가가 연산자 :

당신은 문자열의 길이를 배우고 싶다면

은 문자열의 member function size을 사용합니다.

아니요std::string에 포함 된 문자열의 길이를 반환합니다. 원하는 경우 size() 또는 length()을 사용하십시오.