私はthis answerに取り組んでいました。そして、私は難問にぶつかった:scanf
has an assignment suppressing '*'
:繰り返し割り当てがget_timeに定義されていますか?
このオプションを指定すると、関数は任意の受信引数
への変換の結果を代入しません。しかしget_time
で使用された場合'*'
は、A与えますVisual Studio、libC++、libstdC++:str >> get_time(&tmbuf, "%T.%*Y")
の実行時エラーですので、サポートされていないと思います。
str >> get_time(&tmbuf, "%H:%M:%S.%Y UTC %b %d %Y");
This worksと'*'
は受け付けていないので、これまでget_time
が行くように私の唯一の選択肢であるように思わ:私は二回tmbuf.tm_year
に読み込むことによって、入力を無視することを選択しました。このよう
。しかし、私たち皆が知っているように、それが機能しているという理由だけで、それが定義されているわけではありませ誰かがそれを確認することができます:
get_time
- で二度のストリームを同じ変数を割り当てるために定義され、常に左から右へ
%Y
の1 目発生率を踏みつけされますので、ない読み込まれます2 ND
'get_time'は' scanf'とは関係ありません。どのような 'scanf'ルールが' get_time'に当てはまると思いますか?繰返し割り当ての妥当性については、規格は無効であるとは言いませんし、フォーマット要素が左から右に1つずつ処理されることも規定しています。実際には、書式文字列を処理する正確なアルゴリズムを指定します。このアルゴリズムは、このようなケースをエラーなしで処理します。 –
@ n.m。私はあなたの質問に対する答えとして愚かな考え方をするつもりです。あたかもこれは安全だと思われますか?おそらくあなたは答えにそれを入力するよう促されますか? –