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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2017, 17:24   #1
ezus
Пользователь
 
Регистрация: 08.05.2009
Сообщений: 78
По умолчанию fopen_s - C++ visual studio 2015

Добрый день.
Занимаюсь неприятной работой переноса С++ с 6-ой студии на 2015.
Кроме моря всякого странного возникла ситуация, в которой я что-то не понимаю.
В старом проекте естественно много fopen. Компилятор говорит, что это плохо и надо использовать fopen_s. Ну я и использую:
Код:
	FILE* file = NULL;
	errno_t err = fopen_s(&file, fname, "r");
	if (err != 0)
	{
Компилятор кушает без вопросов, но при запуске я получаю
err == 0
и
file == NULL.

Как это можно понять?
ezus вне форума Ответить с цитированием
Старый 04.05.2017, 12:13   #2
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

А можно побольше кода?

Что хранится в err после вызова fopen_s? Можно посмотреть код ошибки и от этого отталкиваться
https://msdn.microsoft.com/en-us/library/z5hh6ee9.aspx
https://msdn.microsoft.com/en-us/library/t3ayayh1.aspx

Насколько я знаю, fopen_s не панацея, а warning, если некритично менять - можно и оставить

Ну и на крайний случай - использовать стримы
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru
b2soft вне форума Ответить с цитированием
Старый 04.05.2017, 14:47   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от b2soft Посмотреть сообщение
а warning, если некритично менять - можно и оставить
говнокодер detected
_Bers вне форума Ответить с цитированием
Старый 04.05.2017, 15:02   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от b2soft Посмотреть сообщение
Ну и на крайний случай - использовать стримы
В смысле на крайний? Зачем их не использовать в С++?)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.05.2017, 15:23   #5
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
говнокодер detected
Если человек портирует и важна скорость+работоспособность переноса, на подобное можно не обращать внимание, не так ли? Конечно, по-хорошему, можно еще и treat warning as errors поставить и уровень ворнингов поднять.

Цитата:
В смысле на крайний? Зачем их не использовать в С++?)
Опять же, если "переносить код" подразумевает "заставить работать в vs2015" - можно и без стримов обойтись. Если же "переносить код" подразумевает "переписать в стиле C++", то стоит переходить к стримам и переписывать. Тогда и FILE* file = NULL; красивее записать в виде FILE* file = nullptr;
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru

Последний раз редактировалось b2soft; 04.05.2017 в 15:27.
b2soft вне форума Ответить с цитированием
Старый 05.05.2017, 15:49   #6
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

...для чтения сразу всего файла в память, рекомендую эту статью. Там подробно описано, почему 90% нас - лохи ))

http://cpp.indi.frih.net/blog/2014/0...memory-in-cpp/

....и да, работают, как часы их примеры в кросс.

....перечитываю ее уже 5й раз и каждый раз шокируюсь Меня в универе учили, вот тому примеру №2, который чистый UB. Хз сколько кода так работает в мире...

Последний раз редактировалось alexzk; 05.05.2017 в 15:57.
alexzk вне форума Ответить с цитированием
Старый 05.05.2017, 16:48   #7
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Меня в универе учили, вот тому примеру №2
И даже про rdbuf не рассказывали?
Печалька...
Croessmah вне форума Ответить с цитированием
Старый 05.05.2017, 23:07   #8
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от b2soft Посмотреть сообщение
Если человек портирует и важна скорость+работоспособность переноса, на подобное можно не обращать внимание, не так ли?
нет, не так.
предупреждения нельзя игнорировать.
единственное искл:
когда имеем дело с чужой либиной, без альтернатив,
диагностика которой неоправданно дорогостоящая.
_Bers вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
книги c# visual studio 2015 Vzlom C# (си шарп) 1 18.04.2017 09:04
Задача по C# в Visual Studio 2015 ptkuz C# (си шарп) 2 18.11.2016 10:43
ошибка visual studio 2015 Дмитрий1684 Visual C++ 2 16.07.2016 19:09
Сломалась Visual Studio 2015 flesyyykkk Общие вопросы C/C++ 1 27.05.2016 00:08
написать программу в visual studio 2015 Lera_94 Помощь студентам 2 14.10.2015 21:32