scanf_s
принимает переменный список аргументов. Первый аргумент является обязательным, строка со спецификациями преобразования, следующие аргументы зависят от того, какие спецификации преобразования присутствуют в строке формата.
Для каждой спецификации преобразования %s
, %c
и %[
, scanf_s
ожидает 2 аргумента для преобразования: указатель на char
(char *
) и число, переданное с типом rsize_t
, которое указывает размер массива, на который указывает аргумент char *
.
Вот пример:
#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
int main() {
char buf[32];
int res;
printf("Type a word: ");
res = scanf_s("%s", buf, sizeof(buf));
switch (res) {
case EOF:
printf("Input failure\n");
break;
case 0:
printf("Matching failure\n");
break;
case 1:
printf("Success: you typed '%s'\n", buf);
break;
default:
printf("Unexpected return value %d\n", res);
break;
}
return 0;
}
Обратите внимание, однако, что поддержка scanf_s
далеко не универсальна. Платформы Microsoft обычно поддерживают это, но с различной семантикой, в то время как библиотеки Linux и Mac C обычно этого не делают. Прочитайте этот вопрос, чтобы понять Почему gcc не реализовал функции _s?