#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 спасибо, чувак, ты правильно указал на логическую ошибку, которая уничтожала мои программы. Это улучшилось благодаря логике обработки строк. Действительно ценю это.