c - Какъв е смисълът на спецификатора за форматиране% m?

Translate

Резултатът за този код отпечатва „Успех“.

printf("%m\n");
This question and all comments follow the "Attribution Required."

Всички отговори

Translate

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 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ако има допълнителни аргументи, те се оценяват и игнорират.

източник
Leave a Reply
You must be logged in to post a answer.
За автора