2013-10-31 4 views
-3

문자열에 대한 포인터의 배열을 만들려고합니다. 각 문자열에 3 개의 문자 만 넣기를 원합니다. 이것은 내가 지금까지 가지고있는 코드입니다 :새 문자열에 크기를 할당하는 방법은 무엇입니까? C++

string **ptr=new string *[100]; // An array of 100 pointers to strings 

for (i=0;i<100; i++)   // Assigning each pointer with a new string 
{ 
    ptr[i]=new string; 
    (*ptr[i])[3]; 
} 

줄 (* ptr [i]) [3])에 문제가 있습니다. 내가 아닌 포인터를 통해 불과 3 문자와 srting을 만들 수 있다면 내가 작성합니다

string str[3]; 

어떻게 포인터로 3 개 문자를 할당 할 수 있습니까? 감사!

+3

문자열 str (3, ''); ' – pippin1289

+6

'string str [3]'은 3 개의 문자로 된 문자열을 생성하지 않으며, 3 개의 문자열 배열을 생성합니다. – clcto

+4

왜 문자열에 대한 포인터 배열을 원하십니까? 문자열 배열 (또는 크기가 고정되어 있지 않은 경우 벡터)을 사용하여 메모리 관리 문제를 해결하십시오. –

답변

8
std::vector<std::string> vec(100, " "); 

메모리를 직접 관리 할 필요없이 정확히 원하는 것을 수행합니다.

string str[3]; 

3 자로 된 문자열이 아니라 3 개의 문자열로 구성된 문자열을 생성합니다.

+0

문자열 배열의 배열이 아니라는 것을 제외하고는 문자열의 배열입니다 (부여 된 것입니다, 포인터가 아니라 이것을 원할 것입니다). – David

+3

@Dave Agreed, 그가 정확히하려는 일을하지 않습니다. 그것 ** ** 더 나은 **;) –

-1

(*ptr[i])[3];은 단순히 문자열의 네 번째 문자를 액세스하지만 크기를 조정하지 않습니다. std :: string은 resize() 메서드를 제공합니다.

이미 언급했듯이 string str[3]은 3 개의 문자열 배열을 생성하지만 나는 그것에 대해 이야기하려고 생각하지 않습니다.

ptr[i]=new string(3, ' '); 

을 물론 당신이 벡터를 사용한다 :

으로 이미 당신과 같이 크기 인수를 문자열의 ctor 및 채우기 문자를 사용할 수 있습니다 지적했다.

+0

실례합니다, 무엇? 그것은 그 라인에서 일어나는 일이 전혀 아닙니다. 그것은'std :: string'의 3 개의 초기화 된 인스턴스의 배열을 생성합니다. 실제 객체에서'operator []'을 호출하면, 당신이 맞을 것입니다 (그리고 인덱스가 실제로> = 0이고 thokra

+0

죄송합니다. 완전히 잘못되었습니다. 이것은 3 개의 문자열 배열에 대한 선언입니다. –

+0

@thokra 나는 그가 문자열의 네번째 요소에 접근하려고 시도하는'(* ptr [i]) [3];'줄을 의미한다고 생각한다. –

관련 문제