• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 ファイル操作)

C言語でのファイル操作について

このQ&Aのポイント
  • C言語でのファイル操作を勉強中ですが、動作が停止してしまい次に進めません。
  • ファイルをオープンする際にハンドルされない例外が発生しました。
  • エラーメッセージには無効な例外ハンドラールーチンが検出されたとあります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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関数の処理を終了している」のです。

losloson
質問者

お礼

ご親切に有難うございます! 勉強になりました。

その他の回答 (2)

回答No.2

scanf_s("%s", fname); を if (scanf_s("%s", fname,63) != 1) return(0); に変更する。

losloson
質問者

お礼

ありがとうございます。fnameに対してどういった動作をしているのでしょうか?入力値が与えられていない場合はreturn(0)を返しているのでしょうか?

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

コンパイル時、 warning C4473: 'scanf_s': 書式文字列として渡された引数が不足しています note: プレースホルダーとそのパラメーターには 2 の可変個引数が必要ですが、1 が指定されています。 note: 不足している可変個引数 2 が書式文字列 '%s' に必要です note: この引数はバッファー サイズとして使用されます というメッセージが出ていませんか?

losloson
質問者

補足

すいません当方初心者でして 上記のメッセージは何も出力されてなく 動作が停止しましたと出ます。 どうしたらいいかわからないです。