Algorithm Concepts and C++ Syntax

문자열 길이 연산 시 size_t와 int 타입 주의사항

doyyy_0 2024. 9. 16. 15:08

C++에서 문자열 길이를 다룰 때 주로 사용하는 함수인 std::string::size()는 부호 없는 정수 타입인 size_t를 반환합니다. 그런데, size_t와 부호 있는 정수인 int 타입을 혼합하여 연산할 때는 주의해야 합니다. 특히, 문자열 길이를 기준으로 인덱스를 계산하거나 값을 빼는 연산을 할 때 음수가 발생할 수 있습니다.

만약 부호 없는 타입부호 있는 타입을 함께 연산하면, 그 결과는 부호 없는 타입으로 변환되는데, 음수가 나오는 경우에는 쓰레기값이 될 수 있습니다.

 

예를들어,

int i = 2;
string s = "abab";
int result = i - s.size();  // int - size_t 연산
cout << result << endl;

 

이 경우 i - s.size()의 결과는 원래 음수가 되어야 하지만, size_t가 부호 없는 타입이므로 이 결과는 큰 양수로 변환됩니다. 이는 쓰레기값으로 나타나고, 프로그램에서 예기치 않은 동작을 유발할 수 있습니다.

 

따라서 s.size()를 연산할 때는 앞에 (int)로 타입 변환을 할 필요가 있습니다.

 

int result = i - (int)s.size();

 

이렇게 형 변환을 한다면, 쓰레기값이 뜨지 않게 됩니다 ~^^~