2016-10-18 7 views
0

В статье here объясняются различия, которые многие из нас знали годами. Мои предположения были:Что такое соглашение об именах для функций stdio (sprintf, vsprintf и fprintf)?

  • sprintf
    • Первый символ "s" для первого аргумента типа строки.
    • Последний символ «f» для формата?
  • fprintf
    • Первый символ "F" для первого аргумента типа строки.
    • Последний символ «f» для формата?
  • printf
    • начинается с "" для не первого аргумента.
    • Последний символ «f» для формата?

Я думаю, что первая буква для первого аргумента, но vsprintf и printf отрицают это утверждение. Последнее письмо, по-видимому, означает, что он принимает формат. Не говоря уже обо всех других применениях U, N, C, V и F.

Было бы удивительно, если кто-то может дать объяснения и источник к рациональному за все эти конвенции в stdio.

BONUS - Получить дополнительное уважение к удалению имени.

+2

'fprintf()' пишет в поток. Ведущий 'f'stand для * файла *. Окончательный 'f' действительно означает * отформатирован *. – pid

+0

@pid Спасибо за ваш комментарий. Это были те же предположения, что и у меня. Я мог ошибаться, но я думаю, что большинство людей согласны с тем, за что они стоят. Я действительно ищу рациональное, например «эта часть более крупного соглашения об именах»? и исходный материал, например «Кто написал это?». –

ответ

1

префиксы:

  1. N - обеспечивает безопасность для ограничения количества символов можно смело записывать/считывать с.

  2. V - вы используете список переменных аргументов. Это полезно, если вы хотите написать функции, которые эмулируют printf.

  3. S - вы читаете/записываете/из строки.

  4. F - вы читаете/пишите из/в файл.

  5. P - вы читаете с выхода процесса, в

  6. None - Printf и зсапЕ не имеют префиксы, как они только для чтения/записи из стандартного ввода/вывода - что ничего, кроме файлов в мире UNIX.

суффиксы:

  1. F - Вы читать и писать с точки зрения форматного вывода (Вы говорите, что вы будете использовать формат строки с последующим переменными аргументами)

  2. C - Вы имеете дело с персонажами по одному.

  3. S - Вы имеете дело со строками (количество почти всегда, пока вы не достигнете следующего символа пробела).

  4. W - Вы имеете дело со словами (не путать с английскими словами, слово просто означает SizeOf (INT))

3

Это не столько первый символ, который нужно посмотрите, но скорее префикс.

«Оригинальная» функция, printf предназначена для форматированной печати.Один или несколько префиксов могут быть добавлены к printf имя:

  • f: печать на FILE
  • s: печать строки
  • v: печать с va_list
  • n: напечатать заданное число знаков
  • w: печатные широкие символы:

Так что дает нам:

  • printf: отформатирован печать на стандартный вывод
  • fprintf: форматированный печать на FILE
  • sprintf: отформатированных печати в строку
  • snprintf: форматированный печать в строку с заданным количеством символов
  • vprintf: отформатированная печать с va_list на стандартный вывод
  • vfprintf: отформатирована печать с va_list к FILE
  • vsprintf: отформатированных печати с va_list в строку
  • vsnprintf: отформатирована печать с va_list на строку с заданным количеством символов
  • wprintf: отформатированная печать широких символов в stdout
  • fwprintf: отформатированная печать широких символов на FILE
  • swprintf: отформатирован печать широких символов в строку
  • vwprintf: отформатирован печать широких символов с va_list на стандартный вывод
  • vfwprintf: отформатирован печать широких символов с va_list к FILE
  • vswprintf: отформатированных печати широкие символы с va_list до строки
+1

Не забудьте w: wide. :-) –

+0

1) 'swprintf' и' vswprintf' также «с заданным количеством символов», даже если им не хватает 'n'. 2) Рассмотрим тип A-Z. (кроме 'printf') – chux

 Смежные вопросы

  • Нет связанных вопросов^_^