此代码的输出输出为"Success".

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);

which 相当于

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

请注意,%m不需要参数.这里printf("%m\n", d)printf("%s\n", strerror (errno), d)的参数比所需的多:printf的参数如果有额外的尾随参数,它们只是被计算和忽略.

C++相关问答推荐

VS代码输入需要多次

新的memaligning函数有什么用?

intellisense不工作,甚至已经下载了c/c++扩展

GCC:try 使用—WError或—pedantic using pragmas

如何判断宏参数是否为C语言中的整型文字

在C中使用JMP_buf数组进行线程化(在xv6中测试)

当多个线程在C中写入相同的文件描述符时,如何防止争用情况?

为什么删除CAP_DAC_OVERRIDE后创建文件失败?

在编译时参数化类型定义

在列表中插入Int指针(C)

如何在C中打印包含扫描字符和整数的语句?

链接到底是如何工作的,我在这里到底做错了什么

不使用任何预定义的C函数进行逐位运算

不确定如何处理此编译错误

在git补丁中自动添加C的宏

将char*数组深度复制到 struct 中?

在我的第一个C语言中观察到的错误';你好世界';程序

System V 消息队列由于某种原因定期重置

GDB 用内容初始化数组

UEFI 应用程序中的计时器回调仅在 AMI BIOS 中挂起