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++ 流,你会看到类型系统的威力。