Почему в char (C++) записывается лишняя информация?
В зыбыли место под терминальный ноль. Прибавьте по одному символу каждой строке.
На самом деле, функции "strcpy(ui.uCardNum,CN);    strcpy(ui.uPIN,PIN);" у тебя работают не правильно и могут приводить к краху программы из-за порчи стэка. В дебаге даже ругнуться компилятор на это может.  Эти строки копируют символы из одной строки в другую, пока не встретится нуль-терминант в строке источнике, а у тебя нуль-терминанта нигде нет. Теоретически, в этих местах могут хоть гигабайты мусора скопироваться...
Как уже сказали, нужно либо нуль-терминант в конце строк делать (но это увеличит размер каждой строки на один символ), либо выводить эти строки не как строку, а через форматную строку, посимвольно.