【问题标题】:sprintf crashingsprintf 崩溃
【发布时间】:2012-10-12 10:26:24
【问题描述】:
int main()
{
char buf1[100], buf[100]="ddl";
sprintf(buf1, "log_name = '%.*s'", buf);
}
上面的程序崩溃了。我无法理解为什么会崩溃。
据我所知,在字符使 printf 跳过格式代码并将 buf 分配给下一个格式代码之前。
但是这里有什么意义呢?
【问题讨论】:
标签:
c
printf
format-specifiers
【解决方案1】:
格式说明符"%.*s"要求指定要写入的字符数:
sprintf(buf1, "log_name = '%.*s'", 3, buf); /* For example */
/* ^ */
在发布的代码中,仅提供了buf,因此缺少参数,这是未定义的行为(在本例中为崩溃)。
请注意,在这种情况下,"%s" 将与 buf 一样以空值结尾(不要求长度除非不得复制 buf 中的所有字符)。
【解决方案2】:
可以看到这样的效果如下。
int main()
{
printf("%.*s",13,"stackoverflow rocks");
}
这只会给你stackoverflow。