Не могу понять, почему в строке может быть не более MAX_LINE / 2 слова - PullRequest
0 голосов
/ 06 апреля 2019

Мой код фактически получает текстовый ввод от пользователя, а затем токенизатор отделяет все слова от ввода, идентифицируя пробелы.Это также делает больше, но это не имеет отношения к моему вопросу.

Я не могу понять, почему максимальное количество слов может быть до MAX_LINE / 2.Я имею в виду, почему это должно быть / 2?

#define MAX_LINE 4096
#define MAX_WORDS MAX_LINE/2


void tokenize(char *line, char **words, int *nwords);
/* break line into words separated by whitespace, placing them in the 
   array words, and setting the count to nwords */

int main()
{
    char line[MAX_LINE], *words[MAX_WORDS], message[MAX_LINE];
    int stop=0,nwords=0;
int result, pid;
int status;
pid_t child, w;

    while(1)
    {
            printf("OSP CLI $ ");

    /* my code*/

    if (NULL==fgets(line , MAX_LINE, stdin))
    return 0;
    printf("%s",line);

    /* my code ends */

            /* read a line of text here */

            tokenize(line,words,&nwords);

    /* --Not using this code as i found my own---
    if (strcmp (words[0], "exit")==0)
    return 0;
    */
    if (strcmp(line,"exit") == 0) 
    break;

            /* More to do here */

    if (strcmp(words[0], "cd")==0)
    {
        result = chdir(words[1]);
    if (result < 0)
            {
                printf("No such file or directory\n");
            }
        }





    }
    return 0;
}


void tokenize(char *line, char **words, int *nwords)
{
    *nwords=1;

    for(words[0]=strtok(line," \t\n");
        (*nwords<MAX_WORDS)&&(words[*nwords]=strtok(NULL, " \t\n"));
        *nwords=*nwords+1
       ); /* empty body */
    return;
}

1 Ответ

2 голосов
/ 06 апреля 2019

Строка состоит из слов и символов-разделителей (я полагаю, пробелы) с завершающим нулем.Строка с максимально возможным количеством слов выглядит как

a a a a a\0

В этом примере строка содержит 10 символов.Есть 5 слов.Обычно N символов не могут содержать более N / 2 слов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...