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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2008, 12:14   #1
Ceprey
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 47
По умолчанию вывод слова из файла, ошибка

Здравствуйте! Программа должна вывести на консоль первое слово из текстового файла, записанного в том же каталоге, что и файл .срр. Но почему-то при выполнении слово не выводится, после появления консоли - ошибка. С чем это может быть связано? Спасибо

Код:
#include <iostream>
#include <fstream>
using namespace std;



void main()

{
	FILE* ruout;
	ruout = fopen("textru", "r");
char* slovo="";
char* str1="";
if (ruout!=NULL)
fgets (str1, 120, ruout);// взятие строки
	while (*str1!=' ')// взятие символов до первого пробела
	{

	*slovo=*str1;
	str1++;
	slovo++;
	}


cout<<slovo<<endl;
}
Ceprey вне форума Ответить с цитированием
Старый 15.04.2008, 12:28   #2
Ceprey
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 47
По умолчанию

Я переформулирую вопрос. Экспериментируя, я понял, что слабое звено в этом коде - присваивание в строке 20. Компилятор это пропускает - ошибка возникает уже при выполнении программы. Почему такое присваивание невозможно? Вот, например, вариант еще проще:

Код:
#include <iostream>   
using namespace std;   
  
  
  
void main()
{
	char* str1 = "Kiligramm";
	*(str1+3)='o';
	cout<<str1<<endl;


}
*(str1+3) - разыменованный указатель на четвертый символ, т.е., сам символ. Если это символьная переменная, то почему нельзя ей присвоить новое значение? Или в каком разделе учебников про это должно быть написано?
Ceprey вне форума Ответить с цитированием
Старый 15.04.2008, 12:49   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты в отладчике смотрел чему равно ruout?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.04.2008, 11:35   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Ceprey, перед тем, как записывать что-то в строку, под неё надо выделить память. Вы же выделяете под неё 1 байт
Код:
char* str1="";
, а записать пытаетесь целое слово. Кроме всего, не пользуетесь поиском, строки разбиваются на слова целыми днями, скажем вот :
http://programmersforum.ru/showthrea...t=13439&page=2
http://programmersforum.ru/showpost.php?p=88568
B_N вне форума Ответить с цитированием
Старый 17.04.2008, 12:05   #5
Ceprey
Пользователь
 
Регистрация: 01.03.2008
Сообщений: 47
По умолчанию

Спасибо за ответы! Буду разбираться. Насчет одного байта, это действительно меня чего-то повело не в ту сторону, но во втором коде этой проблемы не должно быть? Сегодня выяснил, что тот второй, более короткий код, на некоторых компьютерах срабатывает нормально, без ошибок, но это, видимо, отдельная тема. Огромное спасибо на ссылку, буду изучать код, хотя, конечно, ощущение полного счастья будет, когда сам его напишу.
Ceprey вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод прямоугольников на С. Ошибка зацикливания. KirTheCruel Помощь студентам 7 27.05.2008 21:19
вывод из файла!!! Exclucive Общие вопросы C/C++ 2 24.05.2008 20:42
Вывод атрибутов файла в NTFS un07 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 27.02.2008 19:47
вывод файла на экран! Шушелла Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.10.2007 09:34
Вывод данных BMP файла на форму Vasya Фриланс 18 24.03.2007 00:59