2014-03-05 62 views
-1

我正在爲一個shell實現一個歷史記錄功能,並且在數據結構上掛斷了電話。我已經實現了一維指針數組來實現char數組。我的問題是我現在試圖讀取這些字符數組(字符串C),並將它們顯示在屏幕上以顯示最近的命令。但是隻有最近的命令纔會輸出。它看起來像所有東西都是正確添加的,因爲我在添加期間輸出了一條消息,但在檢索中看起來有些混亂。從一維字符串中獲取字符串

將指針數組添加到char。

/* Size Less than MAX */ 
if (size < MAX_COMMAND) 
{ 
    /* Add Command to History */ 
    history[size++] = inputBuffer; 
    printf("%s Added", inputBuffer); 
} 
/* Size Equals Max */ 
else if (size == MAX_COMMAND) 
{ 
    /* Add Command to History */ 
    history[start++] = inputBuffer; 
    printf("%s\n Added2", inputBuffer); 

    /* Circulize Array */ 
    start %= MAX_COMMAND; 
} 
/* Error State */ 
else 
{ 
    /* Throw Error for Unable to Save */ 
    perror("Unable to Save Command to History!"); 
} 

從指針陣列中讀取數據。

if (strcmp(inputBuffer, "h") == 0 || strcmp(inputBuffer, "history") == 0) 
{ 
    int i = start; 
    while (i < size) 
    { 
     char *commandFromHistory = strdup(history[i]); 
     printf("%s\n", commandFromHistory); i++; 
    } 
} 

所以基本上,如果我跑我的殼和輸入ls,然後CAL,則h我將有H,H,H回來,而不是小時,CAL,LS。任何建議將不勝感激。

+0

複製/粘貼錯誤使用

history[size++] = inputBuffer; 

只是使用的strdup() :加入和閱讀完全一樣的程序。 –

+0

固定。對不起,我錯過了。 – malibubts

回答

2

如果輸入緩衝區是一個char指針,我認爲每次你將inputbuffer分配給歷史記錄時,你只是把指向inputbuffer的指針放在每個歷史元素中。所以當你閱讀你的歷史時,它只是打印輸入緩衝區中的任何內容,因爲這是指針指向的內容。

而不是像你在讀部分

history[size++] = strdup(inputbuffer); 

與同爲你的代碼時,大小== MAX_COMMAND

+0

這個伎倆。謝謝你,先生! – malibubts