기존의 C API에 vector와 string을 넘기는 방법을 알아두자

vector<int> v 라는 객체가 있을때 int* 를 받는 함수에 넘기는 방법은 &v[0] 을 사용하면 된다.
vector는 연속된 메모리로 컨테이너를 관리하므로 저렇게 넘기면 배열을 사용하는 C언어 함수에서도 문제될것이 없다.(반복자 begin을 사용하는 경우를 생각해 볼수 있지만 반복자는 엄연히 반복자객체이지 배열의 시작포인터를 의미하지는 않는다. vector에서 이 둘이 같은것을 의미할 지라도 두개의 개념은 분리해서 사용하는것이 옳다.)

string 의 경우는 구현이 연속된 메모리로 규정되있지 않기때문에 위의 방법을 사용할수가 없다. 대신 std::string 의 맴버함수로 c_str() 이 있으며 이 함수가 NULL문자로 끝나는 문자열포인터를 리턴한다.





주의사항

  • string 의 c_str()은 const char*를 리턴하므로 문자열의 값을 바꿀수는 없다.
    -> 즉 바꿔야 한다면 바꾼결과를 리턴하는 방식을 사용해야 할것이다.

  • vector를 &v[0]의 형식으로 넘겼을때 배열값 자체를 수정하는것은 상관없지만 배열의 크기를 변경시키는 동작을 해서는 안된다.
  • vector 이외의 컨테이너를 C언어의 배열스타일로 다룰수는 없다. 이런 동작이 필요하다면 vector를 임시버퍼로 사용하는것이 좋다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다