@iRumba

Почему в char (C++) записывается лишняя информация?

Итак, имеется структура
struct userInfo{
  char uCardNum[16];
  char uPIN[4];
  float uBalance;
};


Имеется класс, который управляет коллекцией таких структур. В нем есть процедура add
void add(char CN[16],char PIN[4],float Balance){
    userInfo ui;
    strcpy(ui.uCardNum,CN);
    strcpy(ui.uPIN,PIN);
    ui.uBalance=Balance;
    users.push_back(ui);
    printf(ui.uCardNum);
  };

Все просто, создаем структуру, наполняем ее данными, кладем в vector users
Но в uCardNum записывается не только номер карты, но и дописывается пин код. То есть
printf(ui.uCardNum);
выводит номер карты с пинкодом (например отправляю номер карты 1111111111111111 и пинкод 2222, на выходе будет 11111111111111112222) ((
  • Вопрос задан
  • 2654 просмотра
Пригласить эксперта
Ответы на вопрос 2
SHVV
@SHVV
В зыбыли место под терминальный ноль. Прибавьте по одному символу каждой строке.
Ответ написан
maaGames
@maaGames
Погроммирую программы
На самом деле, функции "strcpy(ui.uCardNum,CN); strcpy(ui.uPIN,PIN);" у тебя работают не правильно и могут приводить к краху программы из-за порчи стэка. В дебаге даже ругнуться компилятор на это может. Эти строки копируют символы из одной строки в другую, пока не встретится нуль-терминант в строке источнике, а у тебя нуль-терминанта нигде нет. Теоретически, в этих местах могут хоть гигабайты мусора скопироваться...
Как уже сказали, нужно либо нуль-терминант в конце строк делать (но это увеличит размер каждой строки на один символ), либо выводить эти строки не как строку, а через форматную строку, посимвольно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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