Есть ли указатель на файл (FILE *), который ни на что не указывает?

StackOverflow https://stackoverflow.com/questions/7384956

  •  29-10-2019
  •  | 
  •  

Вопрос

По некоторым причинам мне нужен указатель файла (FILE *), который ни на что не указывает.Это означает, что я могу передать его функции fprintf, а fprintf игнорировать указатель файла.

например:

родовое слово

Есть ли указатель на файл (FILE *), который ни на что не указывает?

Это было полезно?

Решение

Нет.

Ваш код вызовет исключение во время выполнения.Вы можете использовать, например, /dev/null, если вы работаете в поддерживающей его ОС, но в C ++ нет ничего подобного встроенному.

Другие советы

Чтобы решить вашу актуальную проблему (указанную в комментариях), используйте snprintf вместо printf при условии, что он доступен в вашей реализации C ++ (что не гарантируется в C ++ 03).Передайте нулевой указатель для буфера и 0 для размера.Ничего не записывается, но возвращаемое значение - это длина форматированной строки (исключая нулевой терминатор).

[Edit: ой, я забыл, что код генерируемого кода в Windows не соответствует C99.Он возвращает ошибку, если происходит усечение, а не требуемая длина.Я не знаю, что они собираются делать с тем фактом, что C ++ 0x требует snprintf, соответствующего C99.]

Чтобы ответить на ваш вопрос, вы можете открыть snprintf в UNIX-подобных системах или /dev/null в Windows.Запись в результирующий кодовый кодовый код не имеет никакого эффекта.Однако портативного нулевого устройства не существует.

Почему не упаковывать метод FPRINTF Call с оператором if (NULL != nothing)?

Хотя, как сказал NirMH, вы можете заключить его в if (nothing != NULL), есть и другой способ.Вы можете открыть файл в режиме чтения (с помощью "r"), и когда вы отправляете его в fprintf, запись игнорируется (Edit: как обсуждалось в комментариях, не забудьте установить n=0, если он был отрицательным, как возвращено fprintf).

Я лично предлагаю первый способ.Единственная причина, по которой я могу сделать второе, - это то, что я не могу изменить функцию.

Если вам все равно, зависит ли ваш код от системы, вы можете использовать /dev/null в Linux, nul в Windows и т. д.

Вы ошиблись в дизайне.

Очевидно, что вы хотите знать, сколько символов необходимо для написания вашего числа.

Для этого вы используете _ * printf_, и это хорошая идея. Вы просто хотите вычислить количество «написанных» символов, следовательно, необходимых. Но вы не хотите, чтобы что-либо отображалось, поэтому вы выбрали fprintf вместо просто printf . Но fprintf не работает без ФАЙЛА для записи ...

Как сказал Стив, вам лучше использовать snprintf () , который записывает в строку в памяти.

Как говорит Стив, snprintf , снабженный строкой NULL, должен работать, как задумано, за исключением окон. Затем в Windows просто укажите временную строку, которую вы потом отбросите.

родовое слово

Тогда просто позвоните:

родовое слово

(Эта функция может быть расширена для вычисления размера, необходимого для отображения чего-либо, но я бы предпочел пока не усложнять.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top