Что означает спецификатор форматирования% m?

Вывод этого кода распечатан как «Успешно».

char d='w';
printf("%m\n", d);
26 голосов | спросил Manuel 14 SatEurope/Moscow2013-12-14T03:10:20+04:00Europe/Moscow12bEurope/MoscowSat, 14 Dec 2013 03:10:20 +0400 2013, 03:10:20

1 ответ


0

m спецификатор преобразования не C, а расширение GNU для printf:

Из документации GNU:

http://www.gnu.org/software/libc/manual /html_node/Other-Output-Conversions.html

  

Преобразование «% m» печатает строку, соответствующую коду ошибки, в errno. Смотрите сообщения об ошибках. Таким образом:

fprintf (stderr, "can't open `%s': %m\n", filename);
     

эквивалентно:

fprintf (stderr, "can't open `%s': %s\n", filename, strerror (errno));
     

Преобразование «% m» является расширением библиотеки GNU C.

Итак:

printf("%m\n", d);

эквивалентно

printf("%s\n", strerror (errno), d);

что эквивалентно

printf("%s\n", strerror (errno));

Обратите внимание, что %m не требует аргумента. Здесь printf("%m\n", d) и printf("%s\n", strerror (errno), d) имеют больше аргументов, чем требуется: с printf если есть дополнительные конечные аргументы, они просто оцениваются и игнорируются.

ответил ouah 14 SatEurope/Moscow2013-12-14T03:12:30+04:00Europe/Moscow12bEurope/MoscowSat, 14 Dec 2013 03:12:30 +0400 2013, 03:12:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132