- ベストアンサー
C言語でのファイル操作について
- C言語でのファイル操作を勉強中ですが、動作が停止してしまい次に進めません。
- ファイルをオープンする際にハンドルされない例外が発生しました。
- エラーメッセージには無効な例外ハンドラールーチンが検出されたとあります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>fnameに対してどういった動作をしているのでしょうか? scanf_sは、%sを書式に指定する場合、バッファのポインタの次に「バッファのサイズ」を指定します。 この時、キーボードなどの入力から「指定サイズを超える文字列」が入力された場合、scanf_sは「バッファへの代入を行なわないで呼び出し元に戻る」ようになっています。 つまり「バッファを越える文字列が入れられたら、fnameに何も代入しない」のです。 この時、scanf_sは「代入を行なった項目数」を返すので、scanf_sが「1じゃない値を返した場合」には、fnameには「何も入っていない(というか、メモリのゴミ、不定な値が入っている)」事になります。 もし「入力に成功した」のであれば、scanf_sは「1」を(代入を行なった回数を)返す筈です。 つまり「1以外が返って来た時は、ファイル名のキーボード入力が成功しなかった」のです。 なので「scanf_sが入力に失敗して1じゃない値を返した場合」には「return(0)」を実行しています。 >return(0)を返しているのでしょうか? 違います。「return(0)を実行している」のです。つまり「main関数の処理を終了している」のです。
その他の回答 (2)
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
scanf_s("%s", fname); を if (scanf_s("%s", fname,63) != 1) return(0); に変更する。
お礼
ありがとうございます。fnameに対してどういった動作をしているのでしょうか?入力値が与えられていない場合はreturn(0)を返しているのでしょうか?
- maiko0333
- ベストアンサー率19% (839/4401)
コンパイル時、 warning C4473: 'scanf_s': 書式文字列として渡された引数が不足しています note: プレースホルダーとそのパラメーターには 2 の可変個引数が必要ですが、1 が指定されています。 note: 不足している可変個引数 2 が書式文字列 '%s' に必要です note: この引数はバッファー サイズとして使用されます というメッセージが出ていませんか?
補足
すいません当方初心者でして 上記のメッセージは何も出力されてなく 動作が停止しましたと出ます。 どうしたらいいかわからないです。
お礼
ご親切に有難うございます! 勉強になりました。