Форум программистов, компьютерный форум CyberForum.ru

Функция fopen возвращает нулевой указатель (Visual Studio) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.93
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
19.03.2010, 23:35     Функция fopen возвращает нулевой указатель (Visual Studio) #1
Здраствуйте)
У меня возникла очень странная проблема.просто мистика.

С чем может быть связано возвращение нулевого указателя в функции fopen.?
Я пишу в винАПИ.По пока с новыми функциями не разобрался(для работы с файлами)
Вот.И тут такое.Путь задан жестко.НО!она открывает его ИНОГДА, а чаще всего НУЛЛ возвращяет.Путь правильный.Потому,что по тому же пути из этого же фаила считывает инфу другая фун-я.ТАм всё норм.Файловый поток после считки закрываю.
Даже не знаю в чем может быть дело. =(

Добавлено через 1 час 20 минут
ТА....всё грусно.
Объясните тогда как работает OpenFile()
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2010, 23:35     Функция fopen возвращает нулевой указатель (Visual Studio)
Посмотрите здесь:

Функция возвращает указатель на нужную ячейку переданного массива, но адрес другой C++
C++ Функция alltrim удаляет из строки начальные и конечные пробелы и возвращает указатель на преобразованную строку
C++ Функция возвращает строку (или указатель на начало строки)
Функция с указателем и индексом(Удаляет в строке лидирующие пробелы. Возвращает указатель на преобразованную строку.) C++
C++ Функция принимает указатель на динамический массив и возвращает его же, но без чисел полиндромов (читается с обоих сторон одинаково - 234432)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 00:02     Функция fopen возвращает нулевой указатель (Visual Studio) #21
Слушай, можно открыть файл fopen (), CreateFile (), OpenFile ()

ПО-моему, во всех этих случаях, первый параметр у всех трёх функций- имя файла (в том случае если файл лежит водной директории с твоей прогой, но это частный случай, его не рассматриваем) или же ПУТЬ К ФАЙЛУ. При чём путь ПОЛНЫЙ. Который тебе возвертает (вернее, не возвертает, по-моему, GetOpenFileName)

Ты передаёшь невесть что (сгенерированное GetOpenFileName) первым параметром в одну из этих функций (fopen (), допустим), она ни фига не открывает, естессно, выдаёт ноль.

И ты после этого не видишь связи между GetOpenFileName и открытием других файлов?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 00:13  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #22
ааааааа.Да нет же.
вот что я передаю в fopen!!

C++
1
fl=fopen("dbase.module/Vodafone_McLaren_Mercedes.txt","w");
Независимо от того что там сгенерировал этот тупой ОпенФилеНАме.
Я вобще не понимаю,как она может делать массивы "C:\xxx\yyy\" если блин '\' - это вобще часть управляющей конструкции.НО это ладно.я пытаюсь до вас донести вот что.
C++
1
2
3
4
5
6
7
8
9
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
 FILE *fl;
fl=fopen("dbase.module/Vodafone_McLaren_Mercedes.txt","w");//О ЧУДО ВСЕ РАБОТАЕТ
        return 0;
}

А вот так.fl=0x00000000 почему?!

C++
1
2
3
4
5
6
7
8
9
10
11
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
 FILE *fl;
char pht[MAX_PATH];
ShowOpenDialog(NULL,pht,"Выберите файл","",".bmp");
fl=fopen("dbase.module/Vodafone_McLaren_Mercedes.txt","w");//О ГОСПАДИ НУЛЛ?!!!!как так!!!!!???
        return 0;
}
Почему??"!! массив pht мне нужен не для этих целей! я его использую так :
C++
1
hBmp =(HBITMAP) LoadImage(NULL, pht, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
- и так всё прекрасно работает!
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 00:25     Функция fopen возвращает нулевой указатель (Visual Studio) #23
Слушай, я бы хотел поковыряться, но мне этот путь непонятен:
"dbase.module/Vodafone_McLaren_Mercedes.txt"

Это какой-то экзотический путь.
Можешь удостоверить что всё так как ты сказал, но путь пусть воттак как-нибудь
выглядит,попроще то есть:
C++
1
fl=fopen("E:\\file.txt","w");
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 00:38  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #24
ВОт!!!!вот это была умная мысль!!!!
только незнаю почему вы так любите '\'.

ВОт так прошли все тесты удачно(файл создан)

C++
1
FILE *fl=fopen("C:/Downloads/file.txt","w+");
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 00:39     Функция fopen возвращает нулевой указатель (Visual Studio) #25
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h>
#include <windows.h>
#include <Winuser.h>
 
char *ShowOpenDialog(HWND HWndOwner, char *FileName, char *Title,char *InitialDir, char *Filter) { 
    OPENFILENAME ofn; 
    ZeroMemory(&ofn, sizeof(OPENFILENAME)); 
 
    char szFile[MAX_PATH]; 
        char oFile[MAX_PATH];
    ZeroMemory(szFile, MAX_PATH); 
 
    // инициализация OPENFILENAME 
    ofn.lStructSize = sizeof(OPENFILENAME); 
    ofn.hwndOwner = HWndOwner; 
    ofn.lpstrFile = (LPSTR)szFile; 
    ofn.nMaxFile = MAX_PATH; 
    ofn.lpstrFilter =(LPSTR) Filter; 
    ofn.nFilterIndex = 0; 
    ofn.lpstrTitle = (LPSTR)Title; 
    ofn.lpstrInitialDir =(LPSTR) InitialDir; 
    ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST; 
 
    // Отображаем окно Open dialog. 
    if (GetOpenFileName ((LPOPENFILENAMEW)&ofn)) 
    { 
        //strcpy(FileName, (char *)ofn.lpstrFile);
                memcpy(FileName,ofn.lpstrFile,MAX_PATH);
                //copy_rc(FileName,oFile,'\','\');
                FileName=ofn.lpstrFile;
        return ofn.lpstrFile; 
    } 
    else {
         }
    return false; 
}
 
 
int  main (){
 
FILE *fl;
 
char pht[256];
ShowOpenDialog(NULL,pht,"Выберите файл","",".bmp");
 
 
if (fl=fopen("E:\\file.txt","w")) {
 MessageBox (0, "всё работает", "всё работает", 0);
}
 
else {
 MessageBox (0, "всё плохо", "всё плохо", 0);
}
 
 
 
 
 
        return 0;
}
Парень, вот твой код.
Я лишь упростил объявление main, чтобы компилятор хавал
Как видишь, выводится объявление "Всё работает"

Да, я открываю свой файл , уж больно мне твой путь непонятен.
С окном, созданным GetOpenFileName не работаю, как только он появляется, жму на крестик.
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 00:40  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #26
Блин, как я счастлив
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 00:41     Функция fopen возвращает нулевой указатель (Visual Studio) #27
Хм... Странно, что ты не используешь MessageBox для проверки. Должен знать вроде.

Добавлено через 20 секунд
А чё было-то? Я не понял
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 00:47  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #28
Только теперь вопрос.Как же мне сохранять фаилы исходя из папки где лежит программа? ведь заранее не известно , где она будет.
А если я хочу сохранить например(у меня)
C:/Projects/one/dbase.module/.....

Но если её переместить этот путь уже будет не верен, понимаете о чем я?

Добавлено через 58 секунд
Было то,что краткий путь переставал работать после вызова опенфиленаме =((((( вот обдино ((( столько дней убил.

Добавлено через 2 минуты
ЗЫ я использовал для проверки точки остановки
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 00:51     Функция fopen возвращает нулевой указатель (Visual Studio) #29
Ты меня не путай. Ты хочешь сказать, что работаешь в винде, и у тебя в текущей директоРии есть папка
dbase.module (именно так, с точкой)

В которой, в свою очередь, есть текстовый файл

Vodafone_McLaren_Mercedes.txt?

И вся эта херь соединена обратным слэшем и худо бедно
Vodafone_McLaren_Mercedes.txt

открывался, так что ли?
Ну ни фига себе... Век живи, век учись. Если дело в этом, ты бы прекратил экзотику всё таки.
Обратный слэш для линя, точка только перед расширением файла, как-то так... Чтобы головняков не было...
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 00:56  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #30
окэй.Буду знать)))) это была плохая идея так назвать папку.

Добавлено через 3 минуты
Насчёт обратного слэша...
C:\\Downloads\file.txt -нэ
C:\\Downloads/file.txt -да
C:/Downloads/file.txt -да
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 01:04     Функция fopen возвращает нулевой указатель (Visual Studio) #31
Цитата Сообщение от GAME Посмотреть сообщение
Только теперь вопрос.Как же мне сохранять фаилы исходя из папки где лежит программа? ведь заранее не известно , где она будет.
А если я хочу сохранить например(у меня)
C:/Projects/one/dbase.module/.....

Но если её переместить этот путь уже будет не верен, понимаете о чем я?
Нет, не понимаю. Тебе нужно некоторый файл сохранить в папке с прогой, причём ЗАРАНЕЕ НЕИЗВЕСТНО, в какой папке эта прога будет лежать.

Так?
Если так, то без проблем. Но не сейчас, завтра. Сейчас спать.

Добавлено через 1 минуту
Цитата Сообщение от GAME Посмотреть сообщение
C:\\Downloads\file.txt
Чем плохо?

Добавлено через 1 минуту
Надо так: C:\\Downloads\\file.txt

Добавлено через 35 секунд
Понимаешь, люди могут подумать, что у тебя линь... Зачем тебе непонятки всякие?
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 01:06  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #32
О ДА! я понял в чем была ПРОБЛЕМА. в том что я Лол....как так.
С какова меня потянуло имя папки с точкой сделать !!!!аахахаха =(((((
стоило заменить точку на '_' и с таким путём
C++
1
"dbase_module/Vodafone_McLaren_Mercedes.txt"
всё шикарно работаетЁ!!!!!
kravam, спасибо огромное , сам бы я никогда не понял этой фатальной ошибки!!!!
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 01:08     Функция fopen возвращает нулевой указатель (Visual Studio) #33
ТАк, ладно, тебе, кажись, вот эта api-функция нужна
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 01:12  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #34
Цитата Сообщение от kravam Посмотреть сообщение
Надо так: C:\\Downloads\\file.txt
Для полного пути да, а вот для "кусочного",опытным путем выявлено
C++
1
"dbase_module\\Vodafone_McLaren_Mercedes.txt"
- не создает

Добавлено через 2 минуты
Хотя вот так норм
C++
1
"dbase_module//Vodafone_McLaren_Mercedes.txt"
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 01:13     Функция fopen возвращает нулевой указатель (Visual Studio) #35
Ну, может быть.
...Я бы, не мудрствуя лукаво, использовал

C++
1
system ("CD")
ВЫводит имя текущей директории.
Чё хошь с этим именем делай.
GAME
 Аватар для GAME
22 / 22 / 3
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 01:14  [ТС]     Функция fopen возвращает нулевой указатель (Visual Studio) #36
Цитата Сообщение от kravam Посмотреть сообщение
Ну, может быть.
...Я бы, не мудрствуя лукаво, использовал
ок.попробую)


не знаю почему но работает всё что вы говорите по поводу слэшей только в таком варианте '//' а не '\\', незнаю может компилятор такой

Не по теме:

пойду спать)

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.03.2010, 01:16     Функция fopen возвращает нулевой указатель (Visual Studio)
Еще ссылки по теме:

C++ Деревья С++ (функция, которая получает указатель на корень дерева и возвращает длину самой длинной ветки на дереве)
C++ Функция, получающая подстроку, возвращает испорченный указатель на строку
C++ Как функция возвращает указатель на структуру в массив указателей

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
23.03.2010, 01:16     Функция fopen возвращает нулевой указатель (Visual Studio) #37
Мда... Да нет, всё ничё, сам понимаешь, непринципиально, куда палка наклонена (лишь бы работало). Но так обычно в лине делается. Чел кинет взгляд на код- ага, у тебя линь. И пройдёт мимо. Только из-за этого.
Yandex
Объявления
23.03.2010, 01:16     Функция fopen возвращает нулевой указатель (Visual Studio)
Ответ Создать тему
Опции темы

Текущее время: 03:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru