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が提供されているため、未定義の動作 (この場合はクラッシュ) である引数が欠落しています。

この場合、 null で終了するの"%s"と同じように機能することに注意してください (すべての文字をコピーしてはならない場合を除きbuf、長さの要件はありません)。buf

于 2012-10-12T10:30:13.497 に答える
2

この効果は次のように見ることができます。

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

あなただけを与えるでしょうstackoverflow

于 2012-10-12T10:36:22.767 に答える