• ベストアンサー

fgetsを使って入力した文字列を読み込む。

こんにちは。私は30代の男性です。 上司から、「C言語でコーディングする際にscanfは使わずにfgetsを使うように」との指示があったのですが、scanfしか使ったことがないので、具体的にどうコーディングすればいいのかわかりませんでした(聞いても教えてもくれず…)。どのようにすればfgetsを使って入力した文字列を読み取れるのか、わかる方がいらっしゃれば簡単な例文で教えて頂けるとありがたいのですが。 どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

以下のプログラムは 典型的な誤りのあるプログラムです。 領域の無い部分に書き込みを行うため、 メモリ破壊を起こします。 #include<stdio.h> int main(){  char *str;  fgets(str,100,stdin);  puts(str);  return 0; } ↓修正後 #include<stdio.h> #define MAXSTRLEN (256) int main(){  char str[MAXSTRLEN];  fgets(str,MAXSTRLEN,stdin);  puts(str);  return 0; } このレベルであれば、解説されているサイトは いくつも存在します。 fgets関数の使いかた等も、 Googleなどで調べれば簡単に出てくるので そういったサイトを見ることをお勧めします。

DT50
質問者

お礼

ご回答ありがとうございます。 なるほど。「ありがちな間違い」ということなんですね。 参考にさせていただきます。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

scanfを使わずにfgetsを使うべしとする理由によって、紹介すべき用法も変わってきます。 例えば、scanfの場合は標準入力からしか読めないので、代わりに(なぜかfscanfではなく)fgetsを使うということなのか、プログラムサイズを小さくすることが目的なのか、パフォーマンスを向上させるためなのかということです。 もし、scanfで入力文字数の制限ができないと考えているのであれば、その上司がscanfの仕様を正しく理解していないだけです。 # 聞いても教えてくれない辺り、その可能性が大です。 実際のところはどうなのでしょうか?

DT50
質問者

お礼

ご回答ありがとうございます。 例えば、「数字を入れて欲しいところに文字列をいれられても、バグが発生しないようにするため。」とか言ってました。

すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アドバイス ・http://oshiete1.goo.ne.jp/qa2921301.html→『テキストファイルからの読み込みについて教えてください』 ・http://oshiete1.goo.ne.jp/qa2897482.html→『電話番号を読み込むプログラムについて教えてください』 ・http://oshiete1.goo.ne.jp/qa2892528.html→『ファイルの中身検索と表示』 ・http://oshiete1.goo.ne.jp/qa2886170.html→『CSVファイルの内容を構造体に格納したい(Unix使用)。』 ・http://oshiete1.goo.ne.jp/qa2800259.html→『fscanfでループしてしまう。』 ・http://oshiete1.goo.ne.jp/qa2756391.html→『Cで二次元配列の読み込み』 ・http://oshiete1.goo.ne.jp/qa2749340.html→『fgetsなどをもちいて「改ページ」までの文字列を読み込みたい』 ・http://oshiete1.goo.ne.jp/qa2659290.html→『重複番号出力方法について』 ・上記の質問に fgets 関数が登場します。どんな場面でどのように使えば良いか分かると思います。  その他、上のQ&Aのやり取りから間違えやすい記述とか、いろいろと学べると思います。 ・以上。参考に!→このQ&Aで『fgets』で検索するといっぱい出てきますよ。

参考URL:
http://ohmoriws1.ms.kagu.tus.ac.jp/1997/sotsuken/miyakosi/c04.html
DT50
質問者

お礼

Oh-Orange様 いつもご回答いただきありがとうございます。 上記サイト、参考にさせて頂きます。 ありがとうございました。

すると、全ての回答が全文表示されます。
noname#33971
noname#33971
回答No.1

#include<stdio.h> int main(){ char *str; fgets(str,100,stdin); //ここで入力 puts(str); //ここで出力 return 0; } こんなんでいいですか?

DT50
質問者

お礼

ご回答ありがとうございます。 参考にさせて頂きます。

すると、全ての回答が全文表示されます。

関連するQ&A