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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2013, 22:38   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию Непонятные символы при выводе массива символов

Привет!
Собственно проблема в том, что при выводе массива символов выводится еще и какой-то мусор...

Код:
#include <iostream>
#include <math.h>
using namespace std;
//прототип
void GetStrFromFile(FILE *file, char *string);

void main() {
	/*
	//блок объявления локальных переменных
	FILE *file_in;
	FILE *file_out;
        char pathfile_in[100];
	char pathfile_out[100];
	char basic_str[100];
	//конец данного блока

	//основной код программы
	cout << "Enter path to the file, where values'll be read from: ";
	gets(pathfile_in);
	file_in=fopen(pathfile_in, "rb");
	if (file_in!=NULL) {
		cout << "Enter path to the file, where values'll be written to: ";
	    gets(pathfile_out);
        file_out=fopen(pathfile_out, "wb");
	    if (file_out!=NULL) {
	   	   GetStrFromFile(file_in, basic_str);
		   cout << "String: ";
		   puts(basic_str);
	}
	else cout << "Error opening the requested file." << "\n";
	}
	else cout << "Error opening the requested file." << "\n";
	system("pause");
}

//блок вспомогательных функций
void GetStrFromFile(FILE *file, char *str) {
	fseek(file, 0, 0);
	fread(str, sizeof(char), 3, file);
}
содержимое файла File.in: 3 5
Скриншот: Screenshot

Последний раз редактировалось Igor95; 20.02.2013 в 22:43. Причина: Добавил скриншот
Igor95 вне форума Ответить с цитированием
Старый 20.02.2013, 22:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
        char pathfile_in[100]={0};
	char pathfile_out[100]={0};
	char basic_str[100]={0};
Должно помочь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2013, 23:12   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Да, действительно сработало, спасибо.

То есть мы просто инициализировали массив как NULL, т.е пустой...?
Igor95 вне форума Ответить с цитированием
Старый 20.02.2013, 23:44   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
Да, действительно сработало, спасибо.

То есть мы просто инициализировали массив как NULL, т.е пустой...?
Строчки на си завершаются нуль терминатором. Символом с кодом 0

puts(basic_str); //будет выводить содержимое массива, пока не встретит нулль терминатор

Раньше у тебя массив содежал мусор.
А в функции:

Код:
//блок вспомогательных функций
void GetStrFromFile(FILE *file, char *str) {
	fseek(file, 0, 0);
	fread(str, sizeof(char), 3, file);
}
Ты закачиваешь в массив только 3 символа, но не вставлял нулььтерминатор что бы просигналить о завершении строчки.


Вообще то, правильно было бы сделать вот так:
Код:
//блок вспомогательных функций
void GetStrFromFile(FILE *file, char *str) {
	fseek(file, 0, 0);
	fread(str, sizeof(char), 3, file);
        str[3]='\0';
}
_Bers вне форума Ответить с цитированием
Старый 21.02.2013, 00:42   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

или просто str[strlen(str)]='\0';
спасибо за ответы, разобрался

Последний раз редактировалось Igor95; 21.02.2013 в 00:44.
Igor95 вне форума Ответить с цитированием
Старый 21.02.2013, 01:56   #6
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
или просто
Вас не смущает, что стрлен нужна ноль-терминантная строка?
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Старый 23.02.2013, 20:39   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

ах да!!
что-то я этот момент упустил
Igor95 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выводе строкового массива Bugrimov Общие вопросы C/C++ 25 02.04.2012 22:40
Непонятные символы Кристинка89 Общие вопросы Delphi 7 08.09.2011 02:47
Проблема с деструктором при выводе массива WebbMan Общие вопросы C/C++ 6 28.03.2011 22:23
Отступы при выводе массива Kasper1 Общие вопросы по Java, Java SE, Kotlin 1 03.01.2011 23:20
Портится кодировка при выводе массива в файл delias Win Api 3 20.04.2010 10:05