char c[] = "hello";
printf("%*d", c);
输出为:
无限循环空间
答案 0 :(得分:10)
有人可以向我解释这段代码的输出吗?
无限循环空间
char c[] = "hello";
printf("%*d", c);
%*d
说格式后的第一个arg表示宽度,这里是 c 的地址,解释为一个巨大的数字,默认添加的字符表示宽度一个空间。
请注意,缺少正常的arg常态,以提供要打印的值
如果我使用这样的有效代码:
#include <stdio.h>
int main()
{
printf("%0*d\n", 3, 1);
return 0;
}
结果为001,因为我要求写宽度为3的'1',并且添加的字符为'0'
答案 1 :(得分:0)
首先,我们了解什么是c [] =“ hello”; c是持有hello的char数组,但是array数组是带有内存块的指针的意思是,上面我们创建了一个数组,意味着我们创建了一个指针,其指针hello阻塞了内存,就像c意味着c包含了hello的第一块地址,但是发生了什么在printf(“% d”,c)星号()符号中表示宽度,则第一个参数是这样的宽度 printf(“%* c”,3,c):输出为:h这是宽度3,并打印一个包含c的字符:现在看看为什么屏幕有无限循环,让我们看看printf(“%* d”,c)如我们所知,第一个参数是输出的宽度,这里是一个char c表示bas地址,当 执行的代码会给地址赋予宽度,而您知道地址太长了,有时它是负数,那么为什么您的屏幕有太多空间而不是无限的,因为只要您给予宽度就给宽度,我会进一步怀疑我