내가하고 싶은 것은 쉘 프로그램에서 히스토리 명령을 개발하는 것입니다. 따라서 사용자가 이력을 쓸 때마다 마지막으로 입력 한 10 개의 명령어가 화면에 표시됩니다.
이것은 내 코드입니다 ..
int i;
char cmd[4096];
int cmdHisC =0;
char *cmdHistory;
char *cmdsHistory[10];
while(1) {
/*** Read input from shell ***/
fgets(cmd,4096,stdin);
if(strcmp(cmd,"") != 0)
{
if((cmdHistory= strdup(cmd)) != NULL)
{
if (cmdsHistory[cmdHisC] != NULL)
free(cmdsHistory[cmdHisC]);
cmdsHistory[cmdHisC] = cmdHistory;
cmdHisC++;
}
else
fprintf(stderr, "Error, Cannot save this command in the history pointer: Out of memory\n");
if(cmdHisC>9)
cmdHisC=0;
}
히스토리를 인쇄하려면 cmdsHistory를 의미합니다. 이것은 코드입니다.
if(strcmp(argsCmd[0], "history")==0)
{
for(int n = 0; n<10 ; n++)
{
if(cmdsHistory[n] != NULL)
printf("History command %d: %s\n", n, cmdsHistory[n]);
}
}
그런 다음 사용자가 기록을 쓸 때마다 cmdsHistory를 반복하고 결과를 인쇄합니다.
* cmdHistory (사용자가 입력 한 sets 명령)를 ** cmdsHistory의 배열로 만들 수없는 문제.
도와주세요.
하나의 수정 사항이 변경됩니다.
char **cmdsHistory;
...에
char *cmdsHistory[10]; //or any desire number/macro
그러나 여전히 프로그램 은주기 후에 호출 strdup
하고 재설정 하여 메모리 누수를i as 0
합니다. 그래도 고쳐주세요.
누출에 대한 수정은 다음과 같습니다.
if (cmdsHistory[cmdHisC]) {
free(cmdsHistory[cmdHisC]);
cmdsHistory[cmdHisC] = cmdHistory;
}
NULL
시작할 때 모든 포인터를 초기화해야합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다