title: Why is printf with a single argument (without conversion specifiers) deprecated?
body: <p>In a book that I'm reading, it's written that <code>printf</code> with a single argument (without conversion specifiers) is deprecated. It recommends to substitute</p>
  
  <pre><code>printf("Hello World!");
  </code></pre>
  
  <p>with</p>
  
  <pre><code>puts("Hello World!");
  </code></pre>
  
  <p>or</p>
  
  <pre><code>printf("%s", "Hello World!");
  </code></pre>
  
  <p>Can someone tell me why <code>printf("Hello World!");</code> is wrong? It is written in the book that it contains vulnerabilities. What are these vulnerabilities?</p>