teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

ラスボス

2018/10/20 15:41

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -12,7 +12,16 @@
12
12
 
13
13
  引数の型が`struct Student *`となっていますが、`const struct Student *`とするべきです。なぜなら`Print`関数は引数`g`が指す領域を書き換えません。`const`をつけないことは可読性を下げます。まあ課題の指定でこうなっているのだとは思いますが。
14
14
 
15
+ > `gets`
15
16
 
17
+ 利用してはいけません。すこしググればわかりますが、`gets`はどうやっても安全に利用することができません。`fgets`か`gets_s`を利用してください。
18
+
19
+ 今回の課題では文字列の入力を受けてさらにパースする作業が必要になります。このとき`sscanf`を使ってしまいがちですが、安全に数値へ変換することはできないので、`errno`に気を使いつつ地道に`strtol`系関数を呼ぶことになります。
20
+
21
+ [C言語で安全に標準入力から数値を取得 - Qiita](https://qiita.com/yumetodo/items/238751b879c09b56234b)
22
+
23
+ ・・・ということまで課題を出す側がわかって事前に指導していればいいのですが、9割9分9厘教師はC言語を理解していないので、まあ`sscanf`を使うことになるんだろうなとは思います。やつらいい加減C言語で標準入力をやるのはラスボスに挑むに等しいと理解してくれないだろうか・・・。
24
+
16
25
  ---
17
26
 
18
27
  > seisekiはint型なのに0.6をかけたらdouble型にならないのでしょうか