Проблема со строкой Си
У меня есть строка, состоящая из слов, набранных прописными буквами и разделенных пробелами.Мне нужно найти количество слов, содержащих ровно три буквы «А»,но во время нахождения символа программа вылетает с ошибкой.В чем может быть проблема?
#include <stdio.h>
#include <string.h>
int main(void)
{
char num1[80];
printf("Enter first string: ");
gets(num1);
char *ach1;
int b=0;
ach1 = strtok(num1," ,.");
while (ach1 != NULL) {
printf("\n%s", ach1);
ach1 = strtok(NULL, " ,.");
}
int k = strlen(ach1);
for (int i = 0; i < k; i++) {
if (ach1[i] == "A"){
b++;
}
}
printf("%d",b);
if(b == 3){
printf("Success!");
}
return 0;
}
Ответы (1 шт):
У вас
Использована запретная функция
gets(), так что возможно переполнение буфера. Но вылет идет по другой причине... Используйте, кстати,fgets.Выполняется сравнение символа и строки
ach1[i] == "A". Но это просто приводит к неверной работе, так как это сравнение верным не будет никогда...Вишенка на торте — к
int k = strlen(ach1);вы попадаете только тогда, когда циклwhileзакончен иach1имеет значениеNULL. Попытка обращения к памяти по адресуNULLи валит вашу программу.
Пожалуйста, не разочаровывайте комментарием "и как это исправить?"