Что я пытаюсь сделать, это разбить пользовательский ввод по частям с пробелом в качестве разделителя, скопировать части в массив (tokenAr
) и сравнить tokenAr[0]
(первая часть), если это равным sHistory
. если они равны, проверьте значение tokenAr[1]
, если это «1», «2» и т. д., чтобы выполнить соответствующую команду, введенную в массив history
. Это то, к чему я пытался дойти, и он падает. Я использую TCC для Windows x64. EDIT: Я забыл упомянуть, что начал учиться C всего два дня назад.Передача токенов из массива в strcmp
EDIT2: Я запустить программу в отладчике, и он поднял в линии в Acces Violation(Segmentation Fault)
if(strcmp(tokenArPtr[0],sHistory)==0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i=1; int j=1; int k=0;
char history[100][100] = {0};
char sKey[] = "exit";
char sInput[100];
char sHistory[]="history";
do
{
//gather user input
printf ("hshell> ");
fgets (sInput, 100, stdin);
strcpy(history[i],sInput);
i++;
//END_gather user input
//Tokenizing
char delims[] = " ";
char *tokenArPtr[5];
char *result = NULL;
result = strtok(sInput, delims);
tokenArPtr[0] = result;
while (result!=NULL)
{
puts(result);
result= strtok(NULL, delims);
tokenArPtr[k+1] = result;
puts(tokenArPtr[k]);
puts("=====");
k++;
}
k=0;
/*
//END_Tokenizing
if(strcmp(tokenArPtr[0],sHistory)==0)
{
for(j=1;j<i;j++)
{
printf("%d. %s \n",j,history[j]);
}
}
else if (strcmp (sKey,tokenArPtr[0]) != 0)
{
printf("\nCommand not found \n");
}*/
}while (strcmp (sKey,sInput) != 0);
return 0;
}
EDIT 3: Я использовал result
переменную вместо tokenArPtr
непосредственно, но при отладке, я заметил, что значения массива не обновляются.
Вы пытались запустить его в отладчике? –
@JoachimPileborg No. @hmjd должен ли я установить 'k = 0' после выхода из цикла while? (непосредственно перед комментарием end_tokenizing) – serge