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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2012, 15:02   #1
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию открытие файла через функцию

Здравствуйте.

Создал функцию, которая за меня открывает файл, например:

Код:
void open_file(FILE *file)
{
file=fopen("myFile.txt","r");
}
затем в программе

Код:
int main()
{
char c;
FILE *file;
open_file(file);
c=fgetc(file);
fclose(file);
}
краш при попытке читать символ. Сразу в main() файл открывается и читается, а через функцию - нет. В чем может быть проблема?
Артэс вне форума Ответить с цитированием
Старый 12.05.2012, 15:07   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

В том, что в функцию передается копия указателя. В вашем случаи нужно передавать указатель на указатель
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 12.05.2012, 15:13   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Артэс

краш при попытке читать символ

пАтАмуштА нужно возвращать открытый файловый указатель, а не читать из мусора.

FILE* open() { return fopen("zzz.txt", "rt"); }
Rififi вне форума Ответить с цитированием
Старый 15.05.2012, 04:29   #4
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Цитата:
Сообщение от Blade Посмотреть сообщение
В вашем случаи нужно передавать указатель на указатель
А как это можно сделать? Пробовал передавать в качестве аргумента *file, и &file, не получается.
Артэс вне форума Ответить с цитированием
Старый 15.05.2012, 07:16   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А как это можно сделать?
Ау-ка протри дустом глазки, и внимательно почитай пост Рифифи - там пример
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.05.2012, 17:59   #6
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

Это один вариант. Функция возвращает указатель, а мне надо наоборот, передать указатель в функцию, которая уже и откроет файл на тот указатель. Возможно ли так?
Артэс вне форума Ответить с цитированием
Старый 15.05.2012, 20:48   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
bool open(FILE* f) { return fopen(f,"zzz.txt", "rt"); }
И проверяй
Код:
if(!open(f)) printf("О черт! Файл не открыт")
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.05.2012, 11:23   #8
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

В том и прикол, что я хочу сделать проверку на успешное открытие файла как раз внутри функции open. Таким образом, она за меня сразу проверит открытие файла. Если он не открыт, выдаст сообщение и закроет программу.

так удобнее:
{
open(file);
fgetc(file);
fclose(file);
}
Артэс вне форума Ответить с цитированием
Старый 16.05.2012, 13:19   #9
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Артэс

я хочу сделать проверку на успешное открытие файла как раз внутри функции open. Таким образом, она за меня сразу проверит открытие файла. Если он не открыт, выдаст сообщение и закроет программу.

Код:
void open(FILE*& fp)
{
    if ((fp = fopen(...)) == NULL)
    {
       puts("Я твой дом, труба шатал, Виндавс, файл открывал, насяльника!");
       exit(1);
    } 
}
Rififi вне форума Ответить с цитированием
Старый 16.05.2012, 14:00   #10
Артэс
Форумчанин
 
Регистрация: 05.06.2007
Сообщений: 529
По умолчанию

error: syntax error before '&' token
In function `open':
error: `fp' undeclared (first use in this function)

не катит так

Да кстати, я пишу на С, а не С++

Последний раз редактировалось Артэс; 16.05.2012 в 14:03.
Артэс вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие файла через делфи Vitalya_1993 Помощь студентам 0 18.12.2011 13:48
Открытие определенного *.exe файла через Button KnoWabLe Общие вопросы Delphi 2 20.09.2011 22:17
Открытие файла через програму kettanaito Общие вопросы Delphi 7 15.08.2011 14:54
Открытие графического файла, через FileDialog Ker_33rus Общие вопросы по Java, Java SE, Kotlin 1 26.12.2010 15:26
Открытие файла и создание графика на основе чисел из файла Simon..14 Общие вопросы C/C++ 8 09.06.2009 10:18