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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Wladius
12 / 7 / 2
Регистрация: 06.01.2013
Сообщений: 127
#1

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

26.03.2013, 11:19. Просмотров 941. Ответов 3
Метки нет (Все метки)

Считываю из файла в строку типа 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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2013, 11:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Считывание из файла в char - при выводе выводится лишнее (C++):

Почему при выводе в поток char* выводится весь массив символов? - C++
я немогу вот в чем разобраться есть : int main() { char v = &quot;Fdasda&quot;; char *p=v; cout &lt;&lt; &quot;\np=&quot; &lt;&lt; p; cout &lt;&lt; &quot;\n*p=&quot; &lt;&lt;*p; ...

При выводе числа выводится #INF - C++
В общем, задали написать программу вычисления кубического уравнения. В сети нашёл алгоритм решения (ссыль, который можно спокойно...

Выводится мусор при выводе массива в обратном порядке - C++
Дайте пожалуйста объяснение багу, высочившемуся у меня во время выполнения следующего задания: вывести массив из n элементов в обратном...

При выводе на экран переменной string выводится набор левых символов - C++
int main() { int s; string b; printf(&quot;DEC: &quot;); scanf(&quot;%i&quot;, &amp;s); for (int i = 31; i &gt;= 0; i--) { s += (char)(((b &gt;&gt;...

Считывание из файла в char' овский массив - C++
Да вопрос боян, но у меня почему-то все символы программа считывает, как один и тот же символ. Дайте пожалуйста код, который считает в...

При выводе данных char исчезает первый элемент - C++
Вот моя программа class Colect { public: Colect(); void Input(); void Output(); private: char *name; int year;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
26.03.2013, 11:33 #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  [ТС] #3
Kastaneda, спасибо, а если строка будет больше 256, или лишняя память выделяется, то можно ли как-то выделить памяти столько сколько нужно не больше/меньше?
Kastaneda
Форумчанин
Эксперт С++
4652 / 2860 / 228
Регистрация: 12.12.2009
Сообщений: 7,268
Записей в блоге: 2
Завершенные тесты: 1
26.03.2013, 11:49 #4
Цитата Сообщение от Wladius Посмотреть сообщение
а если строка будет больше 256, или лишняя память выделяется, то можно ли как-то выделить памяти столько сколько нужно не больше/меньше?
на самом деле прочитаются только 255 символов. Если строка будет больше, она не будет прочитана до конца.
Можно выделить ровно столько памяти, сколько нужно. Для этого сначал необходимо узнать размер файла.

Добавлено через 54 секунды
пример
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2013, 11:49
Привет! Вот еще темы с ответами:

Считывание текста из файла text в массив char - C++
Такая проблема, есть файл с текстом There are many big and small libraries everywhere in our country. They have millions of books in...

Считывание значений из файла (преобразование char в int) - C++
Доброго времени суток. Столкнулся с такой проблемой. Была произведена запись числового массива int16 в файл в таком виде: ...

Лишнее считывание строк - C++
Всем доброго вечера! Как всегда, избитая тема про потоки cin/cout. Предположим, в следующем формате пишется часть кода: ...

При сложении переменных типа char выводится код символа - C++
Почему когда говоришь вывести символ &quot;а&quot; выводится &quot;А&quot; а когда просишь вывести &quot;а+b&quot; выводит значение 70 а не символ &quot;F&quot; с чем это...


Искать еще темы с ответами

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru