%m格式说明符是什么意思?

问题描述 投票:35回答:1

此代码的输出打印为“成功”。

printf("%m\n");
c printf glibc
1个回答
46
投票

[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时,如果还有多余的尾随参数,它们将被求值并忽略。

© www.soinside.com 2019 - 2024. All rights reserved.