Проблема с загрузкой структуры scanf -> char[]

Я имею дело с этой проблемой: я создаю связанный список (используя структуру) и хочу загрузить ввод от пользователя. Когда я отлаживаю этот код, отладчик останавливается на строке scanf.

typedef struct Person{
char name[64];
int number;
} Person;

Person* record = malloc(sizeof(Person));
printf("Input name: \n");
scanf("%63s", record->name);

Я знаю, что (*record).number == record->number и '&' используется для получения адреса переменной, но я понятия не имею, как решить мою проблему самым простым способом, если я хочу использовать scanf для загрузки ввода .

Заранее спасибо.


person Martin    schedule 13.04.2011    source источник
comment
Без отладчика работает?   -  person pmg    schedule 13.04.2011
comment
Кажется, работает .. по мне.   -  person Sadique    schedule 13.04.2011
comment
Дело не только в том, что отладчик ждет вашего ввода?   -  person fnokke    schedule 13.04.2011
comment
Я использую Eclipse в Windows 7, и когда я запускаю программу, она работает и никогда не останавливается. Printf ничего не печатает (потому что в коде должна быть ошибка).   -  person Martin    schedule 13.04.2011
comment
В опубликованном вами фрагменте нет ничего плохого. проблема должна быть где-то еще в вашем коде.   -  person John Bode    schedule 13.04.2011
comment
@John Bode: как написано ниже, должно быть какое-то неожиданное поведение среды Eclipse, потому что другой код правильный.   -  person Martin    schedule 13.04.2011


Ответы (1)


Когда программа отлаживается с помощью gdb и встречается оператор scanf, отладчик запрашивает ввод данных пользователем. Если вы введете ввод в этот момент и нажмете Enter, выполнение продолжится.

Например, 1. Если исходный код указан в имени файла «llist.c»

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

typedef struct Person{
char name[64];
int number;
} Person;

int main()
{

    Person* record = malloc(sizeof(Person));
    if(record == NULL)
    {
       printf("Memory allocation failed\n");
       return;
    }
    printf("Input name: \n");
    scanf("%63s", record->name);
    printf("Name %s\n", record -> name);
    return 0;
}

Скомпилируйте его, используя опцию отладки как

gcc -g -o список llist.c

  1. Запустите отладчик как gdb ./list и введите команду run, чтобы начать выполнение программы.
  2. При появлении запроса на ввод введите любую строку и нажмите Enter.
  3. Затем строка выводится на терминал.
person Nallu    schedule 13.04.2011
comment
Привет, это работает, но когда я пытаюсь запустить или отладить ту же программу в Eclipse, она не работает! Та же проблема. Поэтому я думаю, что между Eclipse и Win должно быть что-то не так. - person Martin; 13.04.2011