不使用printf格式说明符的潜在问题

Ano*_*non 2 c printf

  #include <stdio.h>
  void wrapperPrint(char* s)
  {
      printf(s);
      return;
  }

  int main()
  {

          wrapperPrint("Hello world\n");
          wrapperPrint("This is a string");

      return 0;
  }
Run Code Online (Sandbox Code Playgroud)

如果程序正确打印字符串(确实在gcc 4.6.3上测试过),为什么我们需要像%d,%s等格式说明符.或者换句话说,这个程序的潜在问题是什么.

Jer*_*fin 6

原样,完全没有问题.但是,如果传入包含百分号的字符串,可能会导致问题,因为printf会尝试将其视为转换说明符的开头,但1)转换说明符的其余部分可能不会存在,2)当你调用时,你也不会传递匹配的参数printf,所以如果你确实传递了一个正确的转换说明符,它将尝试使用一个不存在的参数(给出未定义的行为).