2014-03-05 3 views
-1

쉘에 대한 내역 기능을 구현 중이며 데이터 구조에서 전화 끊기를하고 있습니다. char 배열에 대한 포인터의 1D 배열을 구현했습니다. 내 문제는 내가 지금 그 chars (C 문자열) 배열을 읽고 최근 명령을 표시하기 위해 화면에 표시하려고합니다. 그러나 가장 최근 명령 만 출력됩니다. 추가하는 동안 메시지를 출력하기 때문에 모든 것이 올바르게 추가되는 것처럼 보입니다. 그러나 검색에서 엉망인 것으로 보입니다.1D 배열의 문자열에서 문자열 가져 오기

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를 입력하면, 다음 칼, 다음 시간 나는 시간은, 칼, 시간보다는 다시 LS 와서, 시간, 시간이있을 것이다. 어떤 제안이라도 대단히 감사하겠습니다.

+0

복사/붙여 넣기 오류에 대해 동일한에서 사용하는 같은

history[size++] = inputBuffer; 

단지에서는 StrDup()를 사용의 : 추가와 읽기는 정확히 같은 프로그램입니다. –

+0

수정 됨. 미안해. – malibubts

답변

2

입력 버퍼가 char 포인터 인 경우 inputbuffer를 히스토리에 할당 할 때마다 포인터를 각 history 요소의 inputbuffer에 놓는 것만으로 생각합니다. 그래서 당신이 당신의 히스토리를 읽을 때, 그것은 포인터가 가리키고있는 것이기 때문에 입력 버퍼에 무엇이든지 인쇄하는 것입니다.

대신 당신이 읽기 섹션

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

그리고 당신의 코드 크기 == MAX_COMMAND

+0

이것은 트릭을 만들었습니다. 감사합니다! – malibubts

관련 문제