int main()
{
char buf1[100], buf[100]="ddl";
sprintf(buf1, "log_name = '%.*s'", buf);
}
上面的程序崩溃了。我无法理解为什么会崩溃。据我所知,在字符printf
跳过格式代码并将 buf 分配给下一个格式代码之前。但是这里有什么意义呢?
int main()
{
char buf1[100], buf[100]="ddl";
sprintf(buf1, "log_name = '%.*s'", buf);
}
上面的程序崩溃了。我无法理解为什么会崩溃。据我所知,在字符printf
跳过格式代码并将 buf 分配给下一个格式代码之前。但是这里有什么意义呢?
格式说明符"%.*s"
要求指定要写入的字符数:
sprintf(buf1, "log_name = '%.*s'", 3, buf); /* For example */
/* ^ */
仅在发布的代码buf
中提供了缺少参数,这是未定义的行为(在这种情况下为崩溃)。
请注意,在这种情况下,"%s"
将与空终止一样提供服务buf
(不需要长度,除非buf
不得复制其中的所有字符)。
你可以看到这样的效果如下。
int main()
{
printf("%.*s",13,"stackoverflow rocks");
}
这只会给你stackoverflow
。