У вас есть классическое переполнение буфера. Вы читаете 20 символов в один байт Name
, а дополнительные символы записываются в пространство, занятое head
и cur
и далее, вероятно, попирая возвращаемую информацию, которая хранится в стеке. Если вы напечатали значения head
и cur
в шестнадцатеричном формате, вы, вероятно, обнаружите, что значения соответствуют данным, введенным в Name
. Например, если вы ввели «AAAAAAAAAAAAAAAAAAAA» в Name
, вы, скорее всего, обнаружите, что и head
, и cur
содержат 0x41414141, если вы работаете на 32-битном компьютере.
Вам нужно превратить Name
в массив - и вы можете опустить '&', передав его в sscanf()
. Возможно, вы ожидаете:
char Name, tmp[255];
чтобы объявить и Name, и tmp как массивы из 255 символов; это не то, как работает C, хотя. Декларация эквивалентна:
char Name;
char tmp[255];