2016-10-22 86 views
-2
int main() 
    { 

     printf("Hello World!");   
     printf("%s");//printing Hello World again why? 

    } 

此代码打印“Hello World!”两次。为什么会发生这样的事情?C:仅使用字符串格式作为参数的printf

+2

我想你的意思是'printf(“%s”);' –

+0

未定义的行为。在这种情况下,过去的东西(指向字符串的指针)在现在被使用 - 函数调用期望从未给出的参数。回答这个问题并没有真正的目的。 – enhzflep

+0

因为您遇到未定义的行为。你碰巧通过编写错误的代码来获取内存的内容。如果你做了一件完全错误的事情,当你得到一些无法解释的结果时,你不会感到惊讶。 “ –

回答

3

printf("%s")导致未定义的行为。

一旦你在你的程序中有该行,你的整个程序就变得没有定义,可以做或不做任何事情。

最有可能的,通过完整的运气,你的筹码仍然包含指针从一个呼叫的文字字符串,因此功能仍然能够正确执行。

+1

”* ...完成[坏]运气... *“ – alk