Аватар для GAME
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199

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

19.03.2010, 23:35. Показов 7611. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте)
У меня возникла очень странная проблема.просто мистика.

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

Добавлено через 1 час 20 минут
ТА....всё грусно.
Объясните тогда как работает OpenFile()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2010, 23:35
Ответы с готовыми решениями:

Стандартная функция fopen возвращает не NULL и не значение
Ребят тока начинаю писать на си юзаю fopen, но она возвращает 0xcccccc, т.е. не NULL и не указатель на структуру........ что это за бред ...

Функция принимает указатель на void и возвращает указатель на int
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Функция для транслитерации строки возвращает нулевой результат
Написал следующую функцию для транслитерации букв, но результат никакой не показывает, пусто, что ни так? Помогите разобраться ...

36
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 00:02
Студворк — интернет-сервис помощи студентам
Слушай, можно открыть файл fopen (), CreateFile (), OpenFile ()

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

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

И ты после этого не видишь связи между GetOpenFileName и открытием других файлов?
0
 Аватар для GAME
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 00:13  [ТС]
ааааааа.Да нет же.
вот что я передаю в 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);
- и так всё прекрасно работает!
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 00:25
Слушай, я бы хотел поковыряться, но мне этот путь непонятен:
"dbase.module/Vodafone_McLaren_Mercedes.txt"

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

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

C++
1
FILE *fl=fopen("C:/Downloads/file.txt","w+");
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 00:39
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 не работаю, как только он появляется, жму на крестик.
1
 Аватар для GAME
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 00:40  [ТС]
Блин, как я счастлив
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 00:41
Хм... Странно, что ты не используешь MessageBox для проверки. Должен знать вроде.

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

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

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

Добавлено через 2 минуты
ЗЫ я использовал для проверки точки остановки
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 00:51
Ты меня не путай. Ты хочешь сказать, что работаешь в винде, и у тебя в текущей директоРии есть папка
dbase.module (именно так, с точкой)

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

Vodafone_McLaren_Mercedes.txt?

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

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

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

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

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

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

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

Добавлено через 35 секунд
Понимаешь, люди могут подумать, что у тебя линь... Зачем тебе непонятки всякие?
1
 Аватар для GAME
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 01:06  [ТС]
О ДА! я понял в чем была ПРОБЛЕМА. в том что я Лол....как так.
С какова меня потянуло имя папки с точкой сделать !!!!аахахаха =(((((
стоило заменить точку на '_' и с таким путём
C++
1
"dbase_module/Vodafone_McLaren_Mercedes.txt"
всё шикарно работаетЁ!!!!!
kravam, спасибо огромное , сам бы я никогда не понял этой фатальной ошибки!!!!
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 01:08
ТАк, ладно, тебе, кажись, вот эта api-функция нужна
0
 Аватар для GAME
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199
23.03.2010, 01:12  [ТС]
Цитата Сообщение от kravam Посмотреть сообщение
Надо так: C:\\Downloads\\file.txt
Для полного пути да, а вот для "кусочного",опытным путем выявлено
C++
1
"dbase_module\\Vodafone_McLaren_Mercedes.txt"
- не создает

Добавлено через 2 минуты
Хотя вот так норм
C++
1
"dbase_module//Vodafone_McLaren_Mercedes.txt"
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 01:13
Ну, может быть.
...Я бы, не мудрствуя лукаво, использовал

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


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

Не по теме:

пойду спать)

0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
23.03.2010, 01:16
Мда... Да нет, всё ничё, сам понимаешь, непринципиально, куда палка наклонена (лишь бы работало). Но так обычно в лине делается. Чел кинет взгляд на код- ага, у тебя линь. И пройдёт мимо. Только из-за этого.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2010, 01:16

Функция не возвращает указатель на структуру
как зделать. пробывал так typedef struct str str ; struct str{ /* */ }

Функция min_element() возвращает указатель на ноль
Необходимо найти максимальный элемент среди минимальных в двумерном массиве. Сначала ищу минимальный элемент всего массива с помощью...

Функция формирует массив и возвращает указатель на него
Задание: написать функцию с аргументами: вещественное х, целое n. Функция формирует массив у: уk=\frac{{x}^{2k}}{k!} k=0,1,..,n-1 и...

Как функция возвращает указатель на структуру в массив указателей
Друзья, следующий вопрос, у меня есть функция, которая: создает указатель на структуру-&gt; выделяет память-&gt; заполняет из файла-&gt;...

Функция, получающая подстроку, возвращает испорченный указатель на строку
Пытаюсь выделить подстроку в Microsoft Visual C++ 2013, чтобы убрать путь к файлу и оставить только имя файла. wchar_t *...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru