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

回答編集履歴

2

2020/11/05 04:05

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -29,4 +29,18 @@
29
29
  のような関数であるべきです。
30
30
 
31
31
 
32
- 関数の分け方から見直せませんかね?
32
+ 関数の分け方から見直せませんかね?
33
+
34
+ ---
35
+
36
+ せっかくなので、元のプログラムを適切に関数分けして、さらにもっとまじめにエラーハンドリングして、可変長の入力に対応させてみました。文字数の関係でソースコードと実行結果はリンク先を参照してください。
37
+
38
+ まずはC言語で書いたもの。エラー処理の関係であまり関数を分けられていないです。
39
+
40
+ [ソースコードと実行結果](https://wandbox.org/permlink/zp179sXEKFZ1uiwe)
41
+
42
+ 次にC++で書いたもの。エラー処理をたくさん書かなくてもいい感じになるのでスッキリしますね。C++20で追加された`std::format`を使っているのですが、まだ殆どの処理系で実装されてないと思うので、その場合は[fmtlib/fmt](https://github.com/fmtlib/fmt)を呼び出すようにしてます。
43
+
44
+ [ソースコード](https://pastebin.com/r4xLuZbD)
45
+
46
+ [実行結果](https://godbolt.org/z/PM5zv4)

1

length

2020/11/05 04:05

投稿

yumetodo
yumetodo

スコア5852

answer CHANGED
@@ -14,6 +14,7 @@
14
14
  例えばデータの読み取りなら、ファイル名とか書き出す配列へのポインタは引数で与えられるべきです。つまり
15
15
 
16
16
  ```c
17
+ #include <stddef.h>
17
18
  #include <stdbool.h>
18
19
  #include <stdint.h>
19
20
  typedef struct {
@@ -22,7 +23,7 @@
22
23
  uint32_t height;
23
24
  uint32_t weight;
24
25
  } data_t;
25
- bool data_read_from_file(data_t* result, const char* file_name);
26
+ bool data_read_from_file(data_t** result, size_t result_length, const char* file_name);
26
27
  ```
27
28
 
28
29
  のような関数であるべきです。