- 111 名前:デフォルトの名無しさん [2018/02/25(日) 06:04:48.57 ID:Jqo0wCIZ0.net]
- >>92 >>94
sprintf(format, "%%%ds%%*[^\n]%%*c", sizeof(input) - 1); の行では input[BUF_SIZE] で BUF_SIZE が80であることから format[] に "%79s%*[^\n]%*c" (\nは改行コード) が格納される。 よって scanf(format, input); は scanf("%79s%*[^\n]%*c", input); の動作。 変換指定の "%79s%*[^\n]%*c" の意味や妥当性は別のお話。 >>96 scanf() の変換指定文字列を sprintf() で生成するやり方は 『プログラミング作法』(カーニハン&パイク)に載ってる。 BUF_SIZE の定義を変えたときにscanf()の変換指定の文字数指定部分も 自動的に追随させる便法(片方だけ修正忘れの防止)として、悪くないかと。 バッファサイズは固定なのに変換指定を動的に作るのは非効率だ、 という気持ちも分かるけどね。
|

|