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

Считывание из файла в char - при выводе выводится лишнее - C++

Восстановить пароль Регистрация
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
26.03.2013, 11:19     Считывание из файла в char - при выводе выводится лишнее #1
Считываю из файла в строку типа char, если у меня в строке меньше 16 символов, то при выводе выводится какой-то мусор, наверное связано с неправильным выделением памяти, пробовал выделять ее различными способами и через malloc и через new char - такая ошибка остается

если вывожу text в цикле (text[i] i++) то выводятся знаки = вместо символов, вообщем совсем меня запутали эти char - если не сложно то самый простенький пример считывание из файла с правильным распределением памяти

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
using namespace std; 
 
void main ()
{   
    fstream f;
    f.open ("in.txt", ios::in); 
    int i=0;
    char k;
    char *text=new char;
    while(!f.eof())
        {f>>text[i];
         i++;}
     cout<<text;
    cin.get();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.03.2013, 11:33     Считывание из файла в char - при выводе выводится лишнее #2
Цитата Сообщение от Wladius Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <fstream>
using namespace std; 
void main ()
{ * 
* * fstream f;
* * f.open ("in.txt", ios::in); 
* * int i=0;
* * char k;
* * char *text=new char;
* * while(!f.eof())
* * * * {f>>text[i];
* * * * *i++;}
* * *cout<<text;
* * cin.get();
}
Налицо неумение работать с указателями и памятью.

Как вариант можно вот так попробовать
C++
1
2
3
4
5
6
7
8
9
10
11
* * fstream f;
* * f.open ("in.txt", ios::in); 
    const int buf_size = 256;
* * int i=0;
* * char k;
* * char *text=new char[buf_size];
* * while(!f.eof() && i < buf_size - 1)
* * * * {f>>text[i];
* * * * *i++;}
     text[i] = '\0';
* * *cout<<text;
Добавлено через 46 секунд
звездочки при цитировании добавились, естессно они не нужны.
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
26.03.2013, 11:42  [ТС]     Считывание из файла в char - при выводе выводится лишнее #3
Kastaneda, спасибо, а если строка будет больше 256, или лишняя память выделяется, то можно ли как-то выделить памяти столько сколько нужно не больше/меньше?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
26.03.2013, 11:49     Считывание из файла в char - при выводе выводится лишнее #4
Цитата Сообщение от Wladius Посмотреть сообщение
а если строка будет больше 256, или лишняя память выделяется, то можно ли как-то выделить памяти столько сколько нужно не больше/меньше?
на самом деле прочитаются только 255 символов. Если строка будет больше, она не будет прочитана до конца.
Можно выделить ровно столько памяти, сколько нужно. Для этого сначал необходимо узнать размер файла.

Добавлено через 54 секунды
пример
Yandex
Объявления
26.03.2013, 11:49     Считывание из файла в char - при выводе выводится лишнее
Ответ Создать тему
Опции темы

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