在嘗試創建shell的幾天之後,我尋求一些幫助。我已經用不同的數據結構開始了4次左右的時間,並請求解決以下問題。我有一個字符串,我需要分解成單獨的參數,並有一個指針。我最終通過參數傳遞給一個exec功能,但因爲我似乎無法正確填寫ARGS我得到有趣的結果,這裏是一個簡化的版本發生了什麼使用const將std字符串轉換爲char *使用const轉換
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
c_str返回一個const指針是有原因的! – 2014-10-07 16:34:57
@NeilKirk常量問題與指向同一地點的指針無關。請注意,他需要非const指針,因爲這是exec *()函數系列所要求的,儘管它們不修改傳遞的字符串,所以'const_cast'在這裏是安全的。這是重複使用導致問題的相同'std :: string'對象。 – cdhowie 2014-10-07 16:38:19