Подсчет вхождений слова в предложении на C

#c #string

#c #строка

Вопрос:

Как упоминалось в заголовке, у меня возникли проблемы при извлечении слова из предложения. Это выдает «ошибку точки останова». Кто-нибудь может помочь мне понять, как я ошибаюсь, поскольку я всего лишь новичок.

 #include<stdio.h>
#include<stdlib.h>
#include <string.h>

int main()
{
    char* word_array[50],  input[51],  word[51], temp[51];
    short i , j, k, flag;
    i = j = k = flag = 0;
    printf("Enter the sentence (max 50 characters):n");
    gets_s(input, 50);
    printf("nEnter the word to be searched : ");
    gets_s(word, 50);

    while (input[i] != NULL)
    {
        while (input[i] == ' ')// skip the spaces
            i = i   1;

        k = 0;
        while (input[i] != ' ' || input[i] != NULL)//extract the words
        {
            word_array[j] = (char*)malloc(50 * sizeof(char));
            *(*(word_array   j)   k) = input[i];
            k = k   1;
            i = i   1;
        }
        *(*(word_array   j)   k) = '';
        printf("nProcessed word : %s", word_array[j]);//just for debugging
        j = j   1;
    }

    for (i = 0; i <= j; i  )
        if (strcmp(word_array[i], word) == 0)
            flag = flag   1;

    printf("nThe word occurred in the sentence %hu times.nn", flag);
    system("pause");
    return 0;
}
  

ошибка точки останова

Комментарии:

1. Предоставляет ли ваша среда программирования отладчик? Я думаю, вам нужно выполнить одношаговое прохождение программы, проверяя значения соответствующих переменных на каждом этапе. Я думаю, что ожидать, что другие люди сделают это за вас, — это надеяться на многое, хотя есть несколько участников с таким уровнем щедрости.

2. Я не прошу никого ОТЛАЖИВАТЬ всю программу для меня, просто пытаюсь понять, «что такое точка останова?» (интернет не дает удовлетворительного ответа) и почему он выдает эту ошибку, когда я не замечаю никаких проблем. Тем не менее, спасибо за мудрость!

3. while (input[i] != ' ' || input[i] != NULL) — задумайтесь об этом на мгновение. Поскольку input[i] оба этих значения (пробел и null) никогда не могут быть одновременно, одно из этих выражений всегда будет истинным. и с применением OR общее выражение, следовательно, всегда будет истинным. Т.Е. у вас есть бесконечный цикл.

4. Точка останова — это команда отладчику остановиться в определенной точке. Я предполагаю, что ваша среда программирования автоматически сгенерировала точку останова и остановила программу из-за повреждения памяти. Я предполагаю, что что-то в вашей программе записывается на адрес, который не был выделен, и вся цепочка блоков памяти повреждена. Я не знаю ни одного очевидного пути вперед, за исключением тщательного анализа программы наряду с одношаговой или трассировкой значений. Однако кто-то умнее меня может сразу заметить проблему.

5. @WhozCraig спасибо, чувак, ты правильно указал на логическую ошибку, которая уничтожала мои программы. Это улучшилось благодаря логике обработки строк. Действительно ценю это.