回答編集履歴

1

誤解

2015/07/28 02:48

投稿

KenTerada
KenTerada

スコア751

test CHANGED
@@ -15,3 +15,107 @@
15
15
  }
16
16
 
17
17
  ```
18
+
19
+
20
+
21
+ P.S.
22
+
23
+ 質問文を読み直して,もしや「名前を配列に格納したい」ということかと思いました.
24
+
25
+ ということで,とりあえずそのような関数と使い方を書き直します.
26
+
27
+ ```c
28
+
29
+ #include <stdio.h>
30
+
31
+ #include <string.h>
32
+
33
+
34
+
35
+ void get2lines(FILE *fp, char *buf, int buflen)
36
+
37
+ {
38
+
39
+ int len;
40
+
41
+ fgets(buf, buflen, fp);
42
+
43
+ len = strlen(buf);
44
+
45
+ fgets(&buf[len], buflen - len, fp);
46
+
47
+ }
48
+
49
+
50
+
51
+ void get_names(char **names, int namelen, char *buf)
52
+
53
+ {
54
+
55
+ int c = 0, i = 0;
56
+
57
+ while(c < namelen) {
58
+
59
+ names[c] = &buf[i];
60
+
61
+ while (buf[i] != ' ' && buf[i] != '\n' && buf[i] != '\0')
62
+
63
+ i++;
64
+
65
+
66
+
67
+ if (buf[i] == '\0') {
68
+
69
+ c++;
70
+
71
+ break;
72
+
73
+ }
74
+
75
+ buf[i] = '\0';
76
+
77
+ i++;
78
+
79
+ c++;
80
+
81
+ }
82
+
83
+ names[c] = NULL;
84
+
85
+ }
86
+
87
+
88
+
89
+ int main(void)
90
+
91
+ {
92
+
93
+ char buf[512];
94
+
95
+ char *names[32];
96
+
97
+ int i;
98
+
99
+ FILE *fp = fopen("test.txt", "r");
100
+
101
+ get2lines(fp, buf, 512);
102
+
103
+ get_names(names, 32, buf);
104
+
105
+ for (i = 0; names[i] != NULL; i++)
106
+
107
+ printf("%s\n", names[i]);
108
+
109
+ }
110
+
111
+ ```
112
+
113
+ エラーチェックなどは基本的にしていないので,
114
+
115
+ 安全なアプリケーションである必要があるのであれば,
116
+
117
+ もっと真面目にチェックしないといけません.
118
+
119
+ このテストケースの場合,スペースなどの読み飛ばす文字が2つ続く場合や,
120
+
121
+ ファイルが存在しない場合などにエラーや想定しない動作をすることがあります.