Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
 Аватар для GAME
23 / 23 / 5
Регистрация: 31.10.2009
Сообщений: 199

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

19.03.2010, 23:35. Показов 7341. Ответов 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru