Заголовок для функции scanf_s

Отвечая на этот вопрос, я скомпилировал код на Ideone и получил эту ошибку

implicit declaration of function ‘scanf_s’ [-Wimplicit-function-declaration]

не stdio.h это заголовок для 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
Другие вопросы по тегам