Форум программистов, компьютерный форум CyberForum.ru

Захват ненужных данных - C++

Восстановить пароль Регистрация
 
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 375
05.04.2014, 00:26     Захват ненужных данных #1
Здравствуйте! Помогите разобраться, почему считывается одно, а записывается другое.
Итак, имеется структура, которую использую для связанного списка:
C++
1
2
3
4
5
6
7
struct Baza
        {
            wchar_t Name[25],Surname[40], Klass[2], Bukva[2];
            Baza *Next, *Prev;
 
        };
Baza *Start, *Tek, *New;
А вот часть кода, где заполняется эта структура непосредственно из файла:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void ReadFile(void)
    {
        NNN=0;
     wifstream File; 
     locale loc("rus_rus.1251");
     File.imbue(loc);
     File.open(NameFile);
     Start=Tek=New=NULL;
     while(!File.eof())
         {
             New=new Baza;
             New->Next=NULL; New->Prev=NULL;
             File>>New->Name;
             File>>New->Surname;
             File>>New->Klass;
             File>>New->Bukva;
             if (Start == NULL) Start=New;
             else 
             {
                 Tek->Next=New;
                 New->Prev=Tek;
                 
             }
             Tek=New;
             NNN++;
         }
     File.close();
    }
Структура данных в файле "Имя Фамилия класс буква", где между словами табуляция.
При чтении из файла на этапе заполнения класса все нормально, в поле появляется нужное значение, но как только считали букву, то она, почему-то, выполняется контакация класса и буква.

Получаем на выходе, например, "11А А". Но если записывать число из разряда единиц, например, "7", то выводится как надо "7 А", хотя отвожу место под хранения 2-х символов.

Что не так? MVS 2010. #include<fstream>
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2014, 00:38     Захват ненужных данных #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от casper007 Посмотреть сообщение
Klass[2]
Тут массив под строку из одного символа. Учитывайте, что функции чтения добавляют в массив '\0', поэтому для него должно быть место в массиве.
casper007
61 / 61 / 21
Регистрация: 12.12.2013
Сообщений: 375
05.04.2014, 00:43  [ТС]     Захват ненужных данных #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Учитывайте, что функции чтения добавляют в массив '\0',
Спасибо за помощь. Но вот только я не понял, каким, тогда, боком в массив записывалась еще и буква, если место только под один символ?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2014, 00:49     Захват ненужных данных #4
Цитата Сообщение от casper007 Посмотреть сообщение
Но вот только я не понял, каким, тогда, боком в массив записывалась еще и буква, если место только под один символ?
Компилятор не отслеживает выход за границу массива. При работе кода, будет чтение, пока не залезет куда не нужно. Там структура, массивы в ней подряд идут, вот и читает в память.
Yandex
Объявления
05.04.2014, 00:49     Захват ненужных данных
Ответ Создать тему
Опции темы

Текущее время: 08:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru