Функция scanf_s не работает нормально с массивом - C (СИ)
Формулировка задачи:
Во время работы с массивами обнаружил, что не работает, казалось бы корректная программа. В итоге, в новом проекте создал простейшую программу.
Она позволила выяснить что scanf_s не работает нормально с массивом... Есть какие-то варианты решения? И почему Visual Studio 2013 не позволяет использовать стандартный scanf?
#include <stdio.h>
#include <conio.h>
int main()
{
int i;
char a[5];
for (i = 0; i < 5; i++)
{
printf("a[%d]=", i);
scanf_s("%s", a);
}
printf("%s", a);
_getch();
}Решение задачи: «Функция scanf_s не работает нормально с массивом»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char c = 0;
char s1[80] = { 0 };
char s2[80] = { 0 };
scanf_s("%c", &c, 1); //при записи одного символа указывается просто спецификатор преобразования, после адрес куда записывается, и едничка, которая говорит о том, что должен быть один символ
scanf_s("%s", s1, _countof(s1)); //при записистроки можно писать просто спецификатор преобразования, затем адрес куда записывать и такую интересную вещь как _countof(s1)
scanf_s("%79s", s2, _countof(s2)); //то же самое, но в спецификатор преобразования нужно вписать максимальный размер строки(не забываем про нуль-символ)
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию main
- Объявляем переменные: c - символ, инициализирован нулем; s1, s2 - строки, инициализированы нулями.
- Используем функцию scanf_s для чтения данных:
- Первое использование: считываем один символ с помощью спецификатора
%cи адреса переменной c, указываем 1 в качестве второго аргумента, чтобы указать, что мы хотим прочитать один символ. - Второе использование: считываем строку с помощью спецификатора
%sи адреса переменной s1, указываем _countof(s1) в качестве второго аргумента, чтобы указать размер массива. - Третье использование: считываем строку с помощью спецификатора
%79sи адреса переменной s2, указываем _countof(s2) в качестве второго аргумента, чтобы указать размер массива.
- Первое использование: считываем один символ с помощью спецификатора
- Программа завершается.