배열은 같은 타입의 객체를 연속된 메모리에 둔다. C 배열은 함수로 넘기는 순간 포인터로 줄고 길이를 잃는다. 길이가 타입에 남는 `std::array`와 길이가 변하는 `std::vector`가 보통의 선택이다.
연속 저장
#include <array>
#include <string>
#include <vector>
std::array<int, 9> files{};
std::vector<int> plies;
plies.push_back(1);
plies.push_back(2);
std::string name = "초";
name += "나라";`vector`는 끝이 꽉 차면 더 큰 버퍼를 잡고 원소를 옮긴다. 그 순간 기존 원소를 가리키던 포인터와 참조는 무효가 된다. 개수를 알면 `reserve`로 재할당을 줄인다.
문자열의 끝
C 문자열은 마지막에 `\0`이 있다. 이 널 문자를 데이터로 착각하거나, 버퍼보다 긴 입력을 쓰면 인접 메모리를 덮는다. 입력은 `std::string`과 `std::getline`으로 받고, `gets` 같은 경계 없는 함수는 쓰지 않는다.
문자 하나의 인코딩과 `char`의 부호는 구현마다 다를 수 있다. 바이트를 다룰 때는 `std::byte`나 `unsigned char`를 고려한다.
댓글
0개아직 댓글이 없습니다.