谁能解释这个代码的输出?

时间:2019-01-28 10:06:03

标签: c

char c[] = "hello"; 

printf("%*d", c);

输出为:

无限循环空间

enter image description here

2 个答案:

答案 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地址,当 执行的代码会给地址赋予宽度,而您知道地址太长了,有时它是负数,那么为什么您的屏幕有太多空间而不是无限的,因为只要您给予宽度就给宽度,我会进一步怀疑我