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

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

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

4

2 回答 2

6

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

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

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

请注意,在这种情况下,"%s"将与空终止一样提供服务buf(不需要长度,除非buf不得复制其中的所有字符)。

于 2012-10-12T10:30:13.497 回答
2

你可以看到这样的效果如下。

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

这只会给你stackoverflow

于 2012-10-12T10:36:22.767 回答