C中的格式说明符 - %s内的%s

Pav*_*ath -1 c format-specifiers

我有类似的东西

char string[]="My name is %s";

printf("%s",string,"Tom");
Run Code Online (Sandbox Code Playgroud)

我期待输出,My name is Tom但我得到了My name is %s

我尝试逃避%角色,但它有效.

这里出了什么问题?我怎么会有%s一个%s

Pav*_*ath 7

尝试这样的事情

printf(string,"Tom");
Run Code Online (Sandbox Code Playgroud)

你的方法的问题是这个 -

只要在格式字符串中printf看到%s格式说明符,它就会假定列表中的下一个参数是字符指针指向的字符串,检索它并将其打印出来代替%s.现在,printf不进行递归替换,因此 %s在你的string遗体内部就是这样,而"汤姆"现在是一个额外的参数,它只是被丢弃了.