sprintf崩溃

时间:2012-10-12 10:26:24

标签: c printf format-specifiers

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

     sprintf(buf1, "log_name = '%.*s'", buf);
  }

以上程序崩溃了。我无法理解为什么会崩溃。 据我所知,字符使printf跳过格式代码并将buf分配给下一格式代码。 但这里有什么意义?

2 个答案:

答案 0 :(得分:6)

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

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

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

请注意,在这种情况下,"%s"的效果与buf的空终止一样(除了,否则不需要长度除非<{em}} buf中的所有字符不得复制。)

答案 1 :(得分:2)

您可以看到以下效果。

int main()
{   
printf("%.*s",13,"stackoverflow rocks");
}

仅提供stackoverflow