쉘을 만들려고 시도한 후에 나는 약간의 도움을 요청합니다. 필자는 다른 데이터 구조로 4 번이나 시작하여 아래의 문제에 대한 해결책을 제시했습니다. 나는 개별적인 인자를 깨고 그것에 대한 포인터가 필요한 문자열을 가지고있다. 내가 재미있는 결과를 얻고 제대로 인수를 채울 것 질수 있기 때문에 내가 궁극적으로 간부 인 함수에 인수를 전달하지만, 여기의 단순화 된 버전입니다const 캐스팅을 사용하여 std 문자열을 char *로 변환
char* args[100];
int counter=0;
string temp = "some text and stuff here";
stringstream s (temp);
while(s>> temp)
{
cout << "TOKEN " << counter << " =" << temp <<endl;
args[counter]=const_cast<char *> (temp.c_str());
counter++;
}
//print the debug info
for(int ii=0; args[ii] != NULL; ii++)
{
cout << "Argument OUT " << ii << ": " << args[ii] << endl;
}
일어나는 뭐죠이 코드는 작동하지 않고 그 이유를 파악하지 못할 . 결과는 args의 모든 값에 "here"를 저장하지만 카운터는 변경됩니다.
TOKEN 0 =some
TOKEN 1 =text
TOKEN 2 =and
TOKEN 3 =stuff
TOKEN 4 =here
Argument OUT 0: here
Argument OUT 1: here
Argument OUT 2: here
Argument OUT 3: here
Argument OUT 4: here
를 실행할 수 있습니다! –
@NeilKirk const-ness 문제는 모두 같은 장소를 가리키는 포인터와 관련이 없습니다. 'const * cast'는 전달 된 문자열을 변경하지 않더라도'exec *()'함수 패밀리가 필요하기 때문에 non-const 포인터가 필요합니다. 그것은 문제를 일으키는 동일한'std :: string' 객체를 재사용하는 것입니다. – cdhowie