Since you had to pick a contrived example, that suggests the problem isn&#x27;t particularly common. If it was &quot;real&quot; enough, you wouldn&#x27;t need a contrived example.<p>&gt; <i>and, in the article, is directly responsible for a bug.</i><p>Nope! It was not responsible for anything whatsoever. Yeah, the backslashes got escaped, but they were <i>already</i> broken, so it didn&#x27;t actually break anything. All it did was make &quot;btest&quot; match instead of &quot;\x08test&quot; match (both of which are equally buggy, though &quot;btest&quot; is more likely to be triggered in the wild).<p>&gt; <i>Are you really arguing that we could make C</i> less <i>confusing by switching printf(&quot;%d&quot;, x) to printf(&quot;\\d&quot;, x)?</i><p>No. I did not say that at all, and I don&#x27;t appreciate straw man arguments.<p>&gt; <i>I&#x27;d say that C strings and C format directives use different escape characters</i> specifically because <i>they&#x27;re likely to be used together</i><p>I doubt it. Neither of us was present (I&#x27;m assuming) when the printf format spec was decided upon, but I&#x27;d wager that % was chosen because this has a semantically different meaning than backslash-escapes. Backslash escapes are just that: escapes. They&#x27;re either stand-ins for certain un-typeable characters, or they disable interpretation of the following character. But % in printf isn&#x27;t used as a character escape, it&#x27;s used as a <i>token</i>. It&#x27;s a stand-in for a more complicated representation of a separate argument. And the fact that it behaves differently than \ does warrants it using a different character.<p>Whereas in other languages, \ typically has the exact same semantic meaning as \ does in C strings (the set of character escapes may vary slightly, although most languages tend to copy C&#x27;s character escapes verbatim). And that&#x27;s why they use \. It&#x27;s the same reason most languages use &quot;&quot; to denote strings, or [] to denote subscripting. It&#x27;s common punctuation that behaves the same across multiple languages, which makes it easy for the programmer to remember and work with.