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

回答編集履歴

2

修正

2018/06/17 17:04

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -24,4 +24,4 @@
24
24
  【蛇足】
25
25
 
26
26
  - バッファオーバーランの危険性があります。文字列が12文字以上入力されてもプログラムが落ちないようにしたいのであれば, [標準入力から安全に文字列を受け取る方法いろいろ - Qiita](https://qiita.com/mpyw/items/aff12a6ff2c7726ed1d8) を参考に改良してください。
27
- - 設計上の問題ですが,実際に実用的なプログラムをもし作るのであれば,「`malloc` し構造体を代入したポインタを返す関数」ではなく「引数で受け取ったポインタに構造体を代入する関数」というデザインにすべきです。構造体に含まれる文字列が固定長であれば,そもそもメモリを動的に確保せずとも使えます。
27
+ - 設計上の問題ですが,実際に実用的なプログラムをもし作るのであれば,「`malloc` した領域へのポインタに構造体を書き込んでそのポインタを返す関数」ではなく「引数で受け取ったポインタが指す領域に構造体を書き込む関数」というデザインにすべきです。構造体に含まれる文字列が固定長であれば,そもそもメモリを動的に確保せずとも使えます。

1

蛇足

2018/06/17 17:04

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -16,4 +16,12 @@
16
16
 
17
17
  - `The variable 'e' is being used without being initialized.` と指摘されているとおり,変数 `e` の値は初期化されておらず,このまま実行しても値は不定です。「値を渡す」のではなく「変数に値をセットする」という使い方をしたいのであれば,修正例のように `&e` として変数へのポインタとして渡す必要があります。 `m` に関しても同様です。
18
18
  - `&n[0]` は `n` で十分です。
19
- - データ格納領域を実際に作らずに `sscanf` で文字列を格納することはできないので,`char *n;` ではなく `char n[12];` として宣言してください。
19
+ - データ格納領域を実際に作らずに `sscanf` で文字列を格納することはできないので,`char *n;` ではなく `char n[12];` として宣言してください。
20
+
21
+
22
+ -----
23
+
24
+ 【蛇足】
25
+
26
+ - バッファオーバーランの危険性があります。文字列が12文字以上入力されてもプログラムが落ちないようにしたいのであれば, [標準入力から安全に文字列を受け取る方法いろいろ - Qiita](https://qiita.com/mpyw/items/aff12a6ff2c7726ed1d8) を参考に改良してください。
27
+ - 設計上の問題ですが,実際に実用的なプログラムをもし作るのであれば,「`malloc` して構造体を代入したポインタを返す関数」ではなく「引数で受け取ったポインタに構造体を代入する関数」というデザインにすべきです。構造体に含まれる文字列が固定長であれば,そもそもメモリを動的に確保せずとも使えます。