對於類,我使用C++創建了一個shell。從C++開始工作已經有一段時間了,所以我遇到了一些麻煩。該項目的一個要求是我必須使用read()系統調用。無法將內存分配給C++中的唯一地址
我需要保持一個命令歷史記錄(類似於bash的,如果你按向上箭頭),其存儲最近20個命令。我覺得做到這一點的最好方法是使用指向先前語句的指針數組。我遇到了一個問題,無論我做什麼,包含用戶輸入的字符串總是存儲在內存中的相同位置。爲了澄清,這意味着,如果用戶輸入5條語句,然後查看他/她的歷史記錄,他們將看到最近的語句5次。我的代碼看起來有點像這樣(我不得不削減一些東西出來,因爲在中間有很多的錯誤處理):
char *history[20];
int historyCounter = 0;
while(true){
char currLine[65];
int charsRead = read(0,currLine,65);
char tmp[charsRead];
strcpy(tmp,currLine); //This is my attempt to ensure the char[] is stored int a
//unique location every time, but this attempt failed.
history[historycounter] = tmp;
historycounter++;
}
只是要注意,在我的源代碼,我做處理時的情況historycounter> 19.只是不在這個片段。
如果需要任何更多的澄清,我很樂意提供。這是我第一次在堆棧溢出發帖,所以如果我犯了新手的任何錯誤,我都會提前道歉。如果解決方案很痛苦,我也很抱歉。我一直在看這一段時間,而我完全有可能沒有直截了當。
不要使用'這裏strcpy' - 'read'不空終止其輸出等'charsRead'不包括終止空字符的空間,也沒有任何終止空字符存在。您應該使用memcpy(並明確記錄長度)或添加終止字符(並確保在複製時爲其分配空間)。 – bdonlan 2011-12-31 21:07:20