int main()
{
char buf1[100], buf[100]="ddl";
sprintf(buf1, "log_name = '%.*s'", buf);
}
以上程序崩溃了。我无法理解为什么会崩溃。
据我所知,字符使printf
跳过格式代码并将buf分配给下一格式代码。
但这里有什么意义?
答案 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
。