📜  C 程序的输出 | 16套

📅  最后修改于: 2022-05-13 01:56:11.233000             🧑  作者: Mango

C 程序的输出 | 16套

预测以下 C 程序的输出。

问题 1

#include 
  
char* fun()
{
  return "awake";
}
int main()
{
  printf("%s",fun()+ printf("I see you"));
  getchar();
  return 0;
}

输出:一些以“I see you”开头的字符串
说明:(感谢 Venki 提出此解决方案)
函数fun() 返回指向 char 的指针。除了打印字符串“I see you”,printf()函数返回它打印的字符数(即 9)。表达式 [fun()+ printf(“I see you”)] 可以归结为 [“awake” + 9] 这只不过是字符串字面量“awake”的基地址被 9 个字符取代。因此,表达式 [“awake” + 9] 在通过 %s 说明符打印时返回垃圾数据,直到找到 '\0'。


问题2

#include 
  
int main()
{
  unsigned i ;
  for( i = 0 ; i < 4 ; ++i )
  {
    fprintf( stdout , "i = %d\n" , ("11213141") ) ;
  }
  
  getchar();
  return 0 ;
}

输出:在不同的机器上打印不同的输出。
说明:(感谢 Venki 提出此解决方案)
格式说明符为 %d,将字符串“11213141”的基地址转换为整数。字符串的基地址取决于编译器的内存分配。 for 循环四次打印相同的地址。尝试使用 C++ 流,你会看到类型系统的威力。