Проблема со строкой Си

У меня есть строка, состоящая из слов, набранных прописными буквами и разделенных пробелами.Мне нужно найти количество слов, содержащих ровно три буквы «А»,но во время нахождения символа программа вылетает с ошибкой.В чем может быть проблема?

#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 шт):

Автор решения: Harry

У вас

  1. Использована запретная функция gets(), так что возможно переполнение буфера. Но вылет идет по другой причине... Используйте, кстати, fgets.

  2. Выполняется сравнение символа и строки ach1[i] == "A". Но это просто приводит к неверной работе, так как это сравнение верным не будет никогда...

  3. Вишенка на торте — к int k = strlen(ach1); вы попадаете только тогда, когда цикл while закончен и ach1 имеет значение NULL. Попытка обращения к памяти по адресу NULL и валит вашу программу.

Пожалуйста, не разочаровывайте комментарием "и как это исправить?"

→ Ссылка