Нужно вывести слова на заданную букву. При отладке появляется ошибка: “нарушение прав доступа при записи по адресу”

170
13 июня 2019, 20:40

При отладке происходит ошибка: Вызвано исключение по адресу

0x6E8FD4EC (ucrtbased.dll) в Lab 24.exe: 0xC0000005:
нарушение прав доступа при записи по адресу 0x00500000.   

Код

#include <string.h>
#include <iostream>
#include <Windows.h>
#include <conio.h>
#include <stdio.h>
int main()
{
    printf("Введите текст");
    char str[256], tmp;
    gets_s(str);
    int n = strlen(str), count;
    printf("Введите букву:");
    char t;
    scanf_s("%s", &t);
    for (int i = 0; i < n; i++)
    {
        if (str[i] == t)
        {
            if (str[i - 1] == 32 && i != 0 || i == 0)
            {
                count = 0;
                while (str[i] != 32 && i < n)
                {
                    i++;
                    count++;
                }
                if (str[i - 1] == ',')
                    for (int j = i - count; str[j] != ','; j++)
                        printf("%s", str[j]);
                printf(" ");
            }
        }
    }
    system("pause");
    return 0;
}

Буду очень благодарен за помощь!

Answer 1

Если ошибка не при компиляции, а при работе - то если читает char, то надо использовать спецификатор %c, а не %s.

char t;
scanf_s("%s", &t);

=>

char t;
scanf_s("%c", &t, 1);

Это только о слете! О том, будет ли ваша программа работать - разговор отдельный... Например, при выводе вы делаете то же самое - используете не тот спецификатор:

printf("%s", str[j]);
Answer 2

Функция scanf_s требует указания размера принимающего буфера как для формата %s, так и для форматов %c и %[]. Вы же почему-то не указываете размер буфера (почему?), по каковой причине ваш вызов scanf_s некорректен.

Если вы собираетесь читать один символ, то это

char t;
scanf_s("%c", &t, 1u);
READ ALSO
ISO C++ forbids converting a string constant to &#39;char*&#39;

ISO C++ forbids converting a string constant to 'char*'

Создал класс HumanПрототипы методов get() и set() объявил в Human

149
Получить значений jtable зная строку

Получить значений jtable зная строку

есть ли какой-нибудь способ получить значение колонок на определенной строке зная её?

132
Добавление элементов в TreeSet

Добавление элементов в TreeSet

Использую коллекцию TreeSetВозможно добавить не больше одной записи в add

266
падает база с различными ошибками

падает база с различными ошибками

проблема в следующем-мне нужно два метода один запрос в базу без возращения Resultset,второй с возвращениемоба эти метода постоянно используются...

126