冲刺'+'字符不打印

sprintf '+' character does not print

本文关键字:打印 冲刺 字符      更新时间:2023-10-16

我需要在sprintf格式参数中包含'+'字符。但我知道这是一个标志说明符。所以我不能这样写

  sprintf( like_part, "'%%'   +   '%s'  + '%%'" , search_string.c_str() );

我试过用'%'字符转义它,但它也不起作用。你知道吗?

  sprintf( like_part, "'%%'   %+   '%s'  %+ '%%'" , search_string.c_str() );

我已经找到了另一种方法。但是即使是参考文献也没有提到如何转义"+"字符。

http://www.cplusplus.com/reference/cstdio/printf/

更新:后来我意识到下面的代码也不能正常工作。

#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char** argv)
{
  char buffer[1024];
  strcpy(buffer,"");
  strcat(buffer,"%");
  strcat(buffer,"");
  strcat(buffer,"%");
  printf(buffer);
  printf("n");
}

输出应该是'%%'但只能是'%';这有什么不对吗?我碰到bug了吗?

第一个版本应该可以正常工作。它只有在作为格式化说明符的一部分时才具有特殊的功能,例如

"My number is %+.0e"

可以像第一个示例那样编写它。只有在前面紧接%字符时,它才是一个说明符。在其他情况下,它是一个标准字符。在printf呼叫中,唯一的特殊字符是%符号(当然还有,但这不是printf特定的)