【问题标题】: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

      【讨论】:

      • @Abhineet:很高兴听到这个。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-24
      • 2011-08-04
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 2011-11-22
      • 2021-05-14
      相关资源
      最近更新 更多