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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2011, 17:40   #1
JoberLord
Пользователь
 
Аватар для JoberLord
 
Регистрация: 28.03.2010
Сообщений: 38
По умолчанию Проблема в теме файловая система

Приветствую всех начал заниматься по учебнику Шилдта "Полный справочник по С++ 4 издание" дошел до темы основы файловой системы прочел вроде все понятно но решил по экспериментировать. Задача состояла в том что бы при запуске программы я вводил название файла а программы его создавала. Код компилировался нормально но вот при запуске выдавало ошибку. Объясните мне почему не работает вот код:

Код:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
	cout << "type a file name....\n";
	 char namefile;
	 cin >> namefile;
	char *f;
	f=&namefile;
	FILE *opf;
	opf = fopen(f, "w+");
	fclose(opf);

return 0;
}
P.S. на char namefile; не обращайте внимания пусть имя файла будет в 1 знак =)

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

А текст ошибки какой?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2011, 17:52   #3
JoberLord
Пользователь
 
Аватар для JoberLord
 
Регистрация: 28.03.2010
Сообщений: 38
По умолчанию


Последний раз редактировалось JoberLord; 10.08.2011 в 18:06.
JoberLord вне форума Ответить с цитированием
Старый 10.08.2011, 18:14   #4
d9m0n
Пользователь
 
Регистрация: 03.03.2009
Сообщений: 29
По умолчанию

Неплохо было бы проверить возвращаемое функцией fopen значение. Возможно файл просто не удалось открыть. Тогда при попытке закрыть его ошибка.
d9m0n вне форума Ответить с цитированием
Старый 10.08.2011, 18:20   #5
JoberLord
Пользователь
 
Аватар для JoberLord
 
Регистрация: 28.03.2010
Сообщений: 38
По умолчанию

Цитата:
Сообщение от d9m0n Посмотреть сообщение
Неплохо было бы проверить возвращаемое функцией fopen значение. Возможно файл просто не удалось открыть. Тогда при попытке закрыть его ошибка.
А не подскажите как это сделать??? А то я новичок в таком деле
JoberLord вне форума Ответить с цитированием
Старый 10.08.2011, 18:23   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Да.
Вот для примера попробуй:
Код:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
	cout << "type a file name....\n";
	 char[] f="c:\\fileMy.txt";// namefile;
	
	FILE *opf;
	opf = fopen(f, "w+");
	fclose(opf);

return 0;
}
Путь полный нужно писать, иначе могут быть проблемы
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2011, 19:22   #7
JoberLord
Пользователь
 
Аватар для JoberLord
 
Регистрация: 28.03.2010
Сообщений: 38
По умолчанию

Благодарю за помощь =) я думал он будет создавать файл рядом с Exe'шником
JoberLord вне форума Ответить с цитированием
Старый 10.08.2011, 19:32   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Кто-то из мудрых сказал: "По шагам её надо!". Вы объявили строку:
Код:
char* f;
Посмотрите (по шагам) чему равно содержимое строки, когда она передаётся в функцию: fopen(f, "w+") - там мусор. Признак конца строки - это '\0'.

Файл создаётся, но при выходе из программы вылетает сообщение (пока не могу понять, почему?):


Код:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
    cout << "type a file name....\n";
    char namefile;
    cin >> namefile;
    char* f;
    f=&namefile;
    f[1] = '\0';
    FILE *opf;
    opf = fopen(f, "w+");
    fclose(opf);

return 0;
}
8Observer8 вне форума Ответить с цитированием
Старый 10.08.2011, 20:55   #9
JoberLord
Пользователь
 
Аватар для JoberLord
 
Регистрация: 28.03.2010
Сообщений: 38
По умолчанию

В самом начале забыл задать еще вопрос почему в opf = fopen(f, "w+"); я не мог поставить переменную namefile? при компиляции была ошибка, а через ссылку получилось.
JoberLord вне форума Ответить с цитированием
Старый 10.08.2011, 20:57   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы знаете отличие строки от одного символа?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виртуальная файловая система Порфирий Общие вопросы .NET 4 08.07.2011 16:16
Файловая система androidvsu Общие вопросы по Java, Java SE, Kotlin 3 13.10.2010 19:04
Файловая система на с++ Nikolai2010 Общие вопросы C/C++ 4 17.03.2010 13:18
Файловая система student_63 Win Api 1 12.04.2008 20:29