[C++] C -style string , std::string

2021. 2. 11. 20:44Study/C&C++

C -style string string , std::string

코딩을 하다보면 종종 문자열을 다뤄야 하는 상황이 있다. C++ 에선  2가지 방법을 지원 하는데

C -style string string, std::string 에대해 알아보려 한다.


 C -style string

C - style string 은 끝에 null을 가지는  char 형 배열이다. C++ 에서는 char 형 배열 마지막에 항상 null(''\0')을 추가해 준다.

 

char str[] = "1234567";
cout << sizeof(str)/ sizeof(str[0])<<endl;

이처럼 선언된 배열 str 은 길이가 7 이고 크기도 7byte (char == 1byte) 인 배열이지만 

배열 크기/char크기 == 8 이 출력된다. 끝을 표현하는 문자 하나가 더 들어있다는 뜻이다(null)

 

cout 은 null 을 만날때까지 출력 해준다. 

 

만약 str[7]을 건들게 되면 끝을 알리는 null 문자가 없으므로 마지막 에 이상한 값이 출력 된다.

 

C++ 에선 <cstirng> 헤더에서 여러 유용한 함수를 지원해 준다.

strcpy(str1, str2) : str1로 str2의 문자열 복사

strcat(str1, str2) : str1로 str2의 문자열 추가

strcmp(str1, str2) : str1 와 str2의 문자열 비교

 

이런 여러 함수를 지원 해 준다 해도 코드가 길어지다 보면 실수로 배열 인덱스를 넘어 접근하는경우, null 문자 삭제

등 여러 문제가 있을 수 있다.

 

std::string

C-style string 의 단점을 보완하여

C++에서 문자열을 사용하기 위해 지원해주는 하나의 Class 이다. <string> 헤더에 있다.

std::string 에는 null 문자가 존재하지 않는다. 

 

capaticy, size를 따로 제공하여 오버플로 문제에서 비교적 자유롭다. 

 

 

 

 

 

'Study > C&C++' 카테고리의 다른 글

[C++] std::cin, getline()  (0) 2021.02.22
[C++]R-value Reference,move Sementics  (0) 2021.02.20
[C++] l-value,r-value  (0) 2021.02.14
[C++] Stack and Heap(feat. Memory Leak)  (0) 2021.02.11
[C++] Pointer vs Reference  (0) 2021.02.11