为什么使用`%s`来使用`printf`打印字符串而不是直接打印它更好?

Spi*_*rix 5 c string printf

我知道声明printf是:

int printf ( const char * format, ... );
Run Code Online (Sandbox Code Playgroud)

这意味着可以直接打印字符串而不是使用%s和字符串作为参数.请参阅以下代码:

char str[50];
char *ptr;
//initialize str and ptr

printf(str);  //BAD
printf(ptr);  //BAD
printf("%s",str);  //GOOD
printf("%s",ptr); //GOOD
Run Code Online (Sandbox Code Playgroud)

我已经读过直接打印字符串,如前两个printfs所示是坏的,应该总是避免这样做.相反,使用%s最后两个printfs中显示的更好.它们都正确打印两个字符串.

那么,为什么使用%s打印字符串printf而不是直接打印它更好呢?
当一个人不使用%s打印字符串时会出现什么问题printf