此代码的输出打印为“成功”。
printf("%m\n");
[m
]转换说明符不是C,而是printf
的GNU扩展:
从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
时,如果还有多余的尾随参数,它们将被求值并忽略。