У меня возникла проблема с очень простой программой, и я действительно не знаю почему. Существует на структуру для человека:Последовательное сканирование сбрасывает строки
typedef struct {
char name[50];
char p_id[11];
char cel[11];
int by;
int id;
} Person;
Теперь, есть еще одна структура, которая стоит для списка контактов:
typedef struct {
Person * people;
} lContacts;
я пытался включить данные человека к ней, и добавьте этого человека в список контактов. Человек добавляется нормально, поэтому я не буду размещать код здесь, но есть что-то не так происходит, когда я прочитал строку:
void include(lContacts * myContacts)
{
Person p;
scanf("%s", p.name);
scanf("%d", &p.by); //birth year
scanf("%s", p.p_id);
printf("TEST P_ID: %s\n\n", p.p_id);
scanf("%s", p.cel);
printf("TEST P_ID AGAIN: %s\n\n", p.p_id);
myContacts->people[index]=p; //don't worry about the index, there is a piece of code I'm omitting to make it easier to read, just assume it is right.
}
}
Обратите внимание, что у меня есть тест печати там, потому что, когда я перечислил мой контактов, контакт p_id
сам был связан с cel
, поэтому я напечатал весь код, пока не обнаружил, что ошибка была там.
Вот входной пример:
Name
1991
11111111111
<console prints| TEST P_ID: 11111111111>
22222222222
<console prints| TEST P_ID AGAIN: 1111111111122222222222>
однако, если я печатаю p.cel
, он правильно напечатанных
<console prints 22222222222>
Любые идеи? Может быть, я должен использовать '&' при сканировании строк? (Я читал об этом и о том, как я понял, нет необходимости ... это так?)
Строки в C состоят из массива 'char', завершенного символом NUL, иначе' '\ 0''. Поскольку массив 'p_id' равен 11 байтам, вы можете хранить 10 цифр плюс NUL. Другими словами, у вас есть ошибка переполнения буфера. – user3386109
ie - изменить pid на char [12] (если 11 - максимальная длина pid) – pm100