Đây là triển khai của tôi về mảng hình tròn cho đến nay. Nó được cho là lưu trữ 5 lệnh cuối cùng được nhập vào, bằng cách nhập lệnh thứ 6 vào vị trí thứ 5 và loại bỏ lệnh thứ nhất. Những gì tôi đã quản lý để làm cho đến nay là, để có thể lưu trữ 5 lệnh và in chúng ra. Trên lệnh thứ 6, tôi nhận thấy rằng nó nằm ở vị trí thứ 2 (k=1
) của historyArray
, nhưng khi gỡ lỗi, k
bằng 0
ít nhất sẽ đẩy lệnh cuối cùng ở trên cùng. Nếu bạn có thể đặt tôi vào đúng hướng một lần nữa, tôi sẽ đánh giá cao nó. Đây là một phần của mã.thực hiện mảng vòng tròn
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{
int i=0;
int j=0;
int k=0;
int tempIndex = 0;
int elementCounter = 0;
char inputString[100];
char *result=NULL;
char delims[] = " ";
char historyArray[5][20] = {0};
char tokenArray[20][20] ;
char hCommand[1][20];
do
{
j = 0;
printf("hshell>");
gets(inputString);
//skip writing "history" in historyArray
if (strcmp(inputString,"history")!= 0)
{
strcpy (historyArray[k], inputString);
}
k = (k+1) % 5;
if (elementCounter <= 5)
elementCounter++;
// Break the string into parts
result = strtok(inputString, delims);
while (result!=NULL)
{
strcpy(tokenArray[j], result);
j++;
result= strtok(NULL, delims);
}
if (strcmp(tokenArray[0], "exit") == 0)
return 0;
if (strcmp(tokenArray[0], "history") == 0)
{
if (j>1)
{
tempIndex = atoi(tokenArray[j]);
puts(tempIndex);
}
else
{
for (i=0; i<elementCounter-1;i++)
printf("%i. %s\n", i+1, historyArray[i]);
}
}
else
{
printf("Command not found\n");
}
} while (1);
}
Sau khi lời đề nghị (vẫn còn chưa đầy đủ):
j = 0;
//elementCounter = 0;
printf("327>");
gets(inputString);
strcpy (historyArray[k], inputString);
k = (k+1) % 5;
if (elementCounter <= 5)
{
elementCounter++;
}
Điều này có thể có hoặc không liên quan, nhưng bạn có tự tin rằng bộ đệm của bạn đủ lớn cho bất kỳ chuỗi nào bạn gặp phải không? Nếu không, thì 'get' và' strcpy' sẽ dẫn đến tràn. Bạn nên điều tra 'fgets' và' strncpy' là "an toàn" thay thế. –
Ngoài ra, tôi hoài nghi về 'if (elementCounter <= 5)'; tại sao bạn cần điều đó? –
@OliCharlesworth Bạn nói đúng. Tôi có kế hoạch sửa chữa chúng sau này. 'If (elementCounter <= 5)' được sử dụng để đếm các phần tử trong mảng và tôi sử dụng nó trong mảng in tiếp tục xuống mã. Nó ở đó để nó không in nhiều hơn 5 giá trị. – serge