Функция устарела - PullRequest
       7

Функция устарела

0 голосов
/ 11 февраля 2019

Я начинаю изучать язык Си, и после небольшого перерыва я снова начинаю изучать его, и я застрял в новых обновлениях.Этот код не работает.Я не могу понять, как это сделать сейчас.Если я перейду с scanf на scanf_s, он все равно не будет работать.Я также пытаюсь изменить объявление типа.Кто-то здесь, кто может объяснить, как я могу изменить этот код и что использовать сейчас, scanf или scanf_s, и в каких случаях их использовать.Заранее спасибо.

#include <stdio.h>
#define N 256

typedef struct
{
   char name[N];
    char surname[N];
    char street[N];
    char city[N];
   char district[3];
    int n_house;
    int day, month, year;

} person;


main()
{

    person s;

    printf("ask name\n");
   scanf("%s", s.name);

   printf("ask sur\n");
   scanf("%s", s.surname);

   printf("ask wh h lives\n");
   scanf("%s %s %s %d", s.street, s.city,      s.district, &s.n_house);

    printf("ask bd\n");
    scanf("%d/%d/%d", &s.day, &s.month,     &s.year);

    printf("personal data of the person :     \n");
   printf("%s %s\n Nato il %d %d %d \n    Vive in %s %s %s %d", s.name,    s.surname, s.day, s.month, s.year,    s.street, s.city, s.district, s.n_house);

}

Ошибка C4996 scanf.Эта функция или переменная может быть небезопасной.Попробуйте вместо этого использовать scanf_s.Чтобы отключить амортизацию, используйте _CTR_SECURE_NO_WARNINGS.

1 Ответ

0 голосов
/ 11 февраля 2019

Я скомпилировал вашу программу с небольшими изменениями:

#include <stdio.h>
#define N 256

typedef struct
{
    char name[N];
    char surname[N];
    char street[N];
    char city[N];
    char district[3];
    int n_house;
    int day, month, year;

} person;


void main(void)
{

    person s;

    printf("ask name\n");
    scanf("%s", s.name);

    printf("ask sur\n");
    scanf("%s", s.surname);

    printf("ask wh h lives\n");
    scanf("%s %s %s %d", s.street, s.city, s.district, &s.n_house);

    printf("ask bd\n");
    scanf("%d/%d/%d", &s.day, &s.month, &s.year);

    printf("personal data of the person :     \n");
    printf("%s %s\n Nato il %d %d %d\nVive in %s %s %s %d\n",
           s.name, s.surname,
           s.day, s.month, s.year,
           s.street, s.city, s.district, s.n_house);

    return;
}

И работает с вводом:

ask name
george
ask sur
mac
ask wh h lives
barcelona sskk ksl 123
ask bd
12/13/1111
personal data of the person :
george mac
Nato il 12 13 1111
Vive in barcelona sskk ksl 123

Это тот тип ввода, который вы пытаетесь?

...