sprintf崩溃

sun*_*oon 1 c printf format-specifiers

 int main()
 {
     char buf1[100], buf[100]="ddl";

     sprintf(buf1, "log_name = '%.*s'", buf);
  }
Run Code Online (Sandbox Code Playgroud)

上面的程序崩溃了.我无法理解为什么会崩溃.据我所知,在角色printf跳过格式代码并将buf分配给下一格式代码之前.但这里有什么意义?

hmj*_*mjd 6

格式说明符"%.*s"要求指定要写入的字符数:

sprintf(buf1, "log_name = '%.*s'", 3, buf); /* For example */
                                /* ^ */
Run Code Online (Sandbox Code Playgroud)

在发布的代码中只buf提供了缺少参数,这是未定义的行为(在这种情况下是崩溃).

注意,在这种情况下,"%s"服务和buf空终止一样(除非buf必须复制所有字符,否则不需要长度).