Заголовок для функции scanf_s
1 ответ
scanf_s
специфичен для Microsoft. Заголовок stdio.h
но не в GCC.
Используется для чтения отформатированных данных из стандартного потока ввода. Эти версии Scanf, scanf_s, _scanf_l, wscanf, _wscanf_l have security enhancements
В то время как Ideone uses GCC
из-за этого только ты получил undefined reference to scanf_s
В основном вы можете найти эту функцию в Windows-компиляторах, таких как
Visual Studio 2008 и Microsoft .NET 2010
Здесь и здесь Вы нашли интересную информацию о scanf_s
int scanf_s(
const char *format [,
argument]...
);
Согласно справке MSDN:
Функция scanf_s считывает данные из стандартного потока ввода stdin и записывает данные в местоположение, заданное аргументом. Каждый аргумент должен быть указателем на переменную типа, которая соответствует спецификатору типа в формате. Если копирование происходит между перекрывающимися строками, поведение не определено.
В отличие от scanf, scanf_s требует указания размера буфера для всех входных параметров типа c, C, s, S или [. Размер буфера передается в качестве дополнительного параметра сразу после указателя на буфер или переменную. Например, при чтении строки размер буфера для этой строки передается следующим образом:
char s[10];
scanf_s("%9s", s, 10);
Размер буфера включает завершающий ноль. Поле спецификации ширины может использоваться, чтобы гарантировать, что считанный токен будет помещаться в буфер. Если поле спецификации ширины не используется, а чтение токена слишком велико, чтобы поместиться в буфер, в этот буфер ничего не будет записано.
In the case of characters, one may read a single character as follows:
char c;
scanf_s("%c", &c, 1);
При чтении нескольких символов для строк с ненулевым символом в конце, в качестве спецификации ширины и размера буфера используются целые числа.
char c[4];
scanf_s("%4c", &c, 4); // not null terminated