我正在做一门课程,要求学生在 macOS 上测试他们的代码。因为我现在无法访问 macOS,所以我需要有人告诉我以下代码在 macOS 上的输出。我正在开发一个 Linux 发行版。如果您建议的话,我了解虚拟机,只是我无法在我的开发环境中访问它。让我解释一下这个测试的目的:我正在用 C 语言编写自己的 printf() 实现,并且我需要使 my_printf() 的行为与 macOS 上的 printf() 完全相同。
int main(void)
{
char c = 'A';
char *name = "Alex";
printf("Hello %-5c my name is %2.ks :)\n", c, name);
}
我的输出是:Hello A,我的名字是 %2.0ks :)
P.S:我觉得很奇怪为什么 printf() 这里在 '%2.0ks' 处添加了 '0' 因为 '格式说明符' 无效,那么为什么 printf() 不只是像在其他中那样按字面打印字符串案例?!
尽力了解情况。预先感谢您的帮助。
可以发现,例如这里https://en.cppreference.com/w/c/io/fprintf
“k”不是有效的转换说明符 - 您已经意识到这一点。
规范的相关第二部分是
如果转换规范无效,则行为为未定义。
所以你的代码有未定义的行为,这是一个非常重要的技术术语,意味着即使在给定的明确定义的环境中,任何事情都可能发生,不可预测。