Преобразуването „% 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 Library.
Така:
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ако има допълнителни аргументи, те се оценяват и игнорират.
Всички отговори
m
спецификатора за преобразуване не е C, а е разширение на GNU заprintf
:От документацията на GNU:
http://www.gnu.org/software/libc/manual/html_node/Other-Output-Conversions.html
Така:
е еквивалентно на
което е еквивалентно на
Забележи, че
%m
не изисква аргумент. Тукprintf("%m\n", d)
иprintf("%s\n", strerror (errno), d)
имат повече аргументи от необходимото: сprintf
ако има допълнителни аргументи, те се оценяват и игнорират.Leave a Reply