chatGPT와의 채팅을 번역/편집해봤다.
std::string
vschar[]
vs std::stringstream
char[]
는 문자의 배열이며 C++에서 가장 기초적인 데이터 형태이다. 문자의 배열(문자열)을 저장하는데 사용하지만 몇 가지 제한 사항이 있다. 그 중 가장 주요한 제한 사항은 컴파일 타임에서 배열의 크기가 정해져야 한다. 만약 문자열 크기를 변경하고 싶으면 새로운 문자열을 만들고 이 문자열에 복사해야 한다.
std::string
은 문자열을 저장/수정하기 위한 동적 배열이다. char[]
와는 다르게, std::string
은 런타임동안 사이즈가 변경될 수 있어 매우 유연하다. std::string
은 substr()
, find()
, replace()
와 같은 문자열 조작이 가능한 함수를 멤버로 가지고 있다. std::string
은 modern C++ 코드에서 char[]
보다 자주 쓰인다.
std::stringstream
은 데이터 흐름(data stream)처럼 문자열을 다루기 위한 클래스이다. 입/출력 스트림처럼 문자열을 읽고 쓸수 있다(read/write 동작). 문자열 파싱(분리)나 다른 타입 데이터를 변환하기에 용이하다. std::stringstream
은 std::string
, char[]
으로 생성될 수 있으며, 내부 데이터는 str()
함수를 사용해서 std::string
으로 return 될 수 있다.
char[]
- std::string
char[]
-> std::string
char char_array[] = "Hello";
std::string str(char_array);
std::string
-> char[]
#include <cstring> // or <string.h>
std::string str = "Hello";
const char* char_ptr = str.c_str();
char char_array[str.length() + 1];
strcpy(char_array, char_ptr);
std::stringstream
- std::string
std::string
=> std::stringstream
#include <sstream>
std::string str = "Hello";
std::stringstream ss(str);
std::stringstream
=> std::string
#include <sstream>
std::stringstream ss;
ss << "Hello";
std::string str = ss.str();
char[]
- std::stringstream
char[]
=> std::stringstream
#include <cstring> // or <string.h>
#include <sstream>
char char_array[] = "Hello";
std::stringstream ss;
ss << char_array;
std::stringstream
=> char[]
char[]
를 std::stringstream
에 삽입하면 널 종료 문자열(null-terminated string)로 취급한다. 이는 std::stringstream
이 널 문자('\0'
)를 만날 때까지 char[]
의 문자를 읽는다는 뜻이다. 만약 char[]
에 널 문자가 없다면, std::stringstream
은 char[]
끝 너머 문자를 읽어 Logical Error가 일어난다.