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
が提供されているため、未定義の動作 (この場合はクラッシュ) である引数が欠落しています。
この場合、 null で終了するの"%s"
と同じように機能することに注意してください (すべての文字をコピーしてはならない場合を除きbuf
、長さの要件はありません)。buf
この効果は次のように見ることができます。
int main()
{
printf("%.*s",13,"stackoverflow rocks");
}
あなただけを与えるでしょうstackoverflow
。