Только начал писать программу, и уже застрял. В 17 строке (5 снизу)
scanf_s("%s", A.message);
ошибка: слишком мало аргументов для вызова
Если вместо scanf_s заюзать gets_s, то прога запускается, но не работает, и в warning такое: "передано недостаточно аргументов для строки формата" Искал в интернете, так и не получилось пофиксить. Вроде бы всё правильно, я даже нашел похожую прогу в инете, там такая же ошибка, хотя та прога должна работать, потому что она написана в "Примерах" в обучающей статье.
#include <stdio.h>
#include <stdlib.h>
struct Mine
{
int key[50];
char message[500];
};
int main()
{
struct Mine A;
system("chcp 1251");
printf("Введіть ключ - ");
scanf_s("%d", &A.key);
printf("\nВведіть повідомлення - ");
//scanf_s("%s", A[30].message);
gets_s(A[30].message);
printf("\nВи ввели: %d, %s", A.key, A.message);
getchar();
return 0;
}
scanf_s("%s", A[30].message);
scanf_s("%s", A.message, 500);
gets_s(A[30].message);
gets_s(A.message);
В справке по функции сказано:
Unlike scanf and wscanf, scanf_s and wscanf_s require the buffer size to be specified for all input parameters of type c, C, s, S, or string control sets that are enclosed in []. The buffer size in characters is passed as an additional parameter immediately following the pointer to the buffer or variable.
Т.е. для любых параметров перечисленных типов требуется указывать в паре (сразу за указателем на буфер) размер приёмного буфера, чтобы исключить возможное переполнение, если входная строка вдруг окажется слишком длинной. Т.о. вызов функции должен выглядеть так:
scanf_s("%s", A.message, 500);
Когда используется массив, можно 500 заменить на макрос _countof, дополнительно выполнив приведение к unsigned типу. Об этом сказано в примечании:
The size parameter is of type unsigned, not size_t. Use a static cast to convert a size_t value to unsigned for 64-bit build configurations.
Получится такой вызов:
scanf_s("%s", A.message, (unsigned)_countof(A.message));
Продвижение своими сайтами как стратегия роста и независимости