Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2012, 12:10   #1
zipo666
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 42
Смех При выводe массива , выводит и грязь , в чём проблeма собcHо ??

Вот код :

Код:
char mas()
{
	int i ;

	int m=0 ;

	int i2=0;

	int calk=0;

	char *mas;

	char letter;

		ifstream input_file ("good.txt");

		while (!input_file.eof())
			{
				letter = input_file.get();

				m++;
		
			}

	mas=new char[m];

	m=0;

		ifstream input_file1 ("good.txt");
		
		while (!input_file1.eof())
			
			{

				letter = input_file1.get();
		
				mas[m]=letter;

				m++;
			
			}



	m=0;

	i=0;

ofstream out("good.txt",ios::trunc);
	
out.close(); //Закрываем файл

		while(mas[i]!='\0')
			{
				if(mas[i]=='\n')
				{i2++;}
				if(i2>=1)
				{
					ofstream out("good.txt",ios::app);
			
					out<<mas[i]; //Записываем первую строчку

					out.close(); //Закрываем файл
				
			}
				i++;
			}

		return *mas;

}
ЗараHee благодарю Ыть
zipo666 вне форума Ответить с цитированием
Старый 12.02.2012, 12:12   #2
zipo666
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 42
По умолчанию

Выводит в файл усё что HHада , + в конце символы , типа ююю>>>>ъъъъ??>>>юююаа?
Так поHимаю , с символом '\0' что то He так Ыть ??
zipo666 вне форума Ответить с цитированием
Старый 12.02.2012, 13:28   #3
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

zipo666,
Код:
return *mas;
Ну вот он вам и выводит, всё, что было в этом блоке памяти до символа '\0' В таком случае надо либо сразу память выделять под указатель этот, либо выводить только то количество байт, которое записали по этому адресу, либо сначала очистить этот блок памяти. Точнее сказать не могу.
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 13.02.2012, 06:04   #4
zipo666
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 42
По умолчанию

И всё таки , как сиe дэло исправить , я что ток He пробовал , всё одHо и тожe ...
zipo666 вне форума Ответить с цитированием
Старый 13.02.2012, 06:05   #5
zipo666
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 42
По умолчанию

ЧeстHo , даж и He думал , что столь простая задача , вызовeт трудHости Ыть
zipo666 вне форума Ответить с цитированием
Старый 13.02.2012, 06:09   #6
zipo666
Пользователь
 
Регистрация: 01.11.2011
Сообщений: 42
По умолчанию

А вродь исправил , а Heт , блиH .. HELP Ыть

Последний раз редактировалось zipo666; 13.02.2012 в 06:15.
zipo666 вне форума Ответить с цитированием
Старый 13.02.2012, 09:42   #7
alexey2
Пользователь
 
Регистрация: 27.01.2012
Сообщений: 37
По умолчанию

Код:
mas=new char[m];
замени на
Код:
mas=new char[m+1];
mas[m]=0;
alexey2 вне форума Ответить с цитированием
Старый 13.02.2012, 12:41   #8
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от zipo666 Посмотреть сообщение
Вот код :

Код:
char mas()
{
	int i ;

	int m=0 ;

	int i2=0;

	int calk=0;

	char *mas;

	char letter;

		ifstream input_file ("good.txt");

		while (!input_file.eof())
			{
				letter = input_file.get();

				m++;
		
			}

	mas=new char[m];

	m=0;

		ifstream input_file1 ("good.txt");
		
		while (!input_file1.eof())
			
			{

				letter = input_file1.get();
		
				mas[m]=letter;

				m++;
			
			}



	m=0;

	i=0;

ofstream out("good.txt",ios::trunc);
	
out.close(); //Закрываем файл

		while(mas[i]!='\0')
			{
				if(mas[i]=='\n')
				{i2++;}
				if(i2>=1)
				{
					ofstream out("good.txt",ios::app);
			
					out<<mas[i]; //Записываем первую строчку

					out.close(); //Закрываем файл
				
			}
				i++;
			}

		return *mas;

}
ЗараHee благодарю Ыть
Когда вы считывали побайтно данные из файлла, то совершенно не обязательно, что последний считанный символ равен 0. Поэтому когда вы записываете массив в выходной файл, может записываться всякий мусор, расположенный после вашего массива в памяти, пока не встретится байт, содержащий 0.
У вас есть два варианта. либо при подсчете символов во входном файле хранить это значение в программе и использовать его при записи массива в выходной файл, либо выделить память под массив на один элемент больше, чем имеется в файле, и в последний элемент массива самостоятельно заносить 0, чтобы установить границу массива.
Для первого варианта заводите дополнительную переменную, например, int size:

Код:
int size;
while ( !input_file.eof() )
{
   letter = input_file.get();
   m++;
}

size = m;

mas = new char[size];
Для второго варианта просто выделяете память на один байт больше и заносите в последний элемент массива 0.

Код:
mas = new char[m+1];
mas[m] = '\0';
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 13.02.2012, 13:01   #9
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

zipo666, а с чем связано употребление буквы "н" в ваших сообщениях в заглавном виде?

И какое смысловое значение имеет это сочетание букв:
Цитата:
Ыть
практически в каждом сообщении?
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 13.02.2012, 13:39   #10
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Blade
Цитата:
с чем связано употребление буквы "н" в ваших сообщениях в заглавном виде?
это английская ЭЙЧ. клавиатуру залил или еще что. ну или просто товарищ наркоман
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 13.02.2012 в 13:42.
pproger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не выводит нужный массив. В чём проблема? Qlry Общие вопросы C/C++ 1 17.05.2011 09:02
В чём ошибка при написании программы? snake91135 Помощь студентам 7 03.02.2011 21:18
В чём ошибка при создании файла? If-then-do Помощь студентам 6 24.09.2010 20:27
В чём ошибка при регистрации cheef Общие вопросы Delphi 2 01.05.2009 08:28