@Razor98

Почему программа работает неправильно?

Всем привет!
В общем я пока только начинаю своё знакомство с Си и сегодня взялся за тему структур.
Мог бы кто-нибудь мне объяснить, почему я неправильно ссылаюсь к указателю в структуре?

Видно, что код учебный, поэтому без оговорок, где не доучил матчасть?

#include <stdio.h>
#include <stdlib.h>


struct morgan {
    unsigned char *a;
    int b;
};


int main()
{

    struct morgan zmienna_strukt;
    struct morgan *wsk;

    wsk=&zmienna_strukt;

    printf("Впиши значение: ");
    fflush(stdout);
    scanf("%d", &zmienna_strukt.b);
    printf("%d \n\n", zmienna_strukt.b);

    zmienna_strukt.a=NULL;
    printf("%s \n\n", zmienna_strukt.a);

    printf("Впиши значение: ");
    fflush(stdout);
    scanf("%s", wsk->a);
    printf("%s \n\n", wsk->a);

    printf("Впиши значение: ");
    fflush(stdout);
    scanf("%d", &(wsk->b));
    printf("%d \n\n", wsk->b);


    getchar(); getchar();
    return 0;
}
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
почему я неправильно ссылаюсь к указателю в структуре?
zmienna_strukt.a=NULL;
...
scanf("%s", wsk->a);

Ссылаешься правильно, но указатель указывает в NULL. Читать туда scanf'ом нельзя. Чтобы можно было читать -- надо чтобы указатель указывал в выделенную память достаточного размера. Например так:
struct morgan zmienna_strukt;
    struct morgan *wsk;
    unsigned char buf[100];

    wsk=&zmienna_strukt;

    printf("Впиши значение: ");
    fflush(stdout);
    scanf("%d", &zmienna_strukt.b);
    printf("%d \n\n", zmienna_strukt.b);

    zmienna_strukt.a=buf;
    buf[0] = 0;
    printf("%s \n\n", zmienna_strukt.a);

    printf("Впиши значение: ");
    fflush(stdout);
    scanf("%s", wsk->a);
    printf("%s \n\n", wsk->a);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы