回答編集履歴

3

誤字修正(行松→行末)

2020/11/01 09:49

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -152,7 +152,7 @@
152
152
 
153
153
 
154
154
 
155
- /* 行の改行文字をカンマに置き換える */
155
+ /* 行の改行文字をカンマに置き換える */
156
156
 
157
157
  buf[ strlen( buf ) - 1 ] = ',';
158
158
 

2

コメントを受けて、具体的なコードを追記した

2020/11/01 09:49

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -89,3 +89,165 @@
89
89
  )
90
90
 
91
91
  ```
92
+
93
+
94
+
95
+ #コメントを受けて追記
96
+
97
+
98
+
99
+ sampleという文字列配列に格納する処理の一例を書いてみました。
100
+
101
+ printf()で途中経過を表示するようにしてみたので確認してみてください。
102
+
103
+
104
+
105
+ ```C
106
+
107
+ #include <stdio.h>
108
+
109
+ #include <errno.h>
110
+
111
+ #include <string.h>
112
+
113
+
114
+
115
+ int main(void)
116
+
117
+ {
118
+
119
+
120
+
121
+ FILE *fp;
122
+
123
+ char buf[50]; /* 制限: 入力ファイルの1行の長さは49文字以外でなければならない */
124
+
125
+ char sample[1024]; /* 制限: 最終的な結果文字列のサイズは1023文字に収まらなければならない */
126
+
127
+
128
+
129
+ fp = fopen("sample.txt","r");
130
+
131
+ if ( fp == NULL ) {
132
+
133
+ perror( "fopen" );
134
+
135
+ return 1;
136
+
137
+ }
138
+
139
+
140
+
141
+ /* sampleを文字列長が0の文字列となるように初期化する */
142
+
143
+ sample[0] = '\0';
144
+
145
+
146
+
147
+ while(fgets(buf,sizeof(buf),fp) != NULL){
148
+
149
+
150
+
151
+ printf( "buf(before)=(%s)\n", buf );
152
+
153
+
154
+
155
+ /* 行松の改行文字をカンマに置き換える */
156
+
157
+ buf[ strlen( buf ) - 1 ] = ',';
158
+
159
+
160
+
161
+ printf( "buf(after)=(%s)\n", buf );
162
+
163
+
164
+
165
+ /* sampleの末尾に現在のbufを連結する */
166
+
167
+ strcat( sample, buf );
168
+
169
+
170
+
171
+ printf( "sample=(%s)\n", sample );
172
+
173
+
174
+
175
+ printf( "\n" );
176
+
177
+ }
178
+
179
+
180
+
181
+ fclose(fp);
182
+
183
+
184
+
185
+ /* sampleの末尾にあるカンマを削除する */
186
+
187
+ sample[ strlen( sample ) - 1 ] = '\0';
188
+
189
+
190
+
191
+ printf( "loop end\n" );
192
+
193
+ printf( "sample=(%s)\n", sample );
194
+
195
+
196
+
197
+ return 0;
198
+
199
+ }
200
+
201
+ ```
202
+
203
+
204
+
205
+ ```terminal
206
+
207
+ $ ./hoge
208
+
209
+ buf(before)=(A
210
+
211
+ )
212
+
213
+ buf(after)=(A,)
214
+
215
+ sample=(A,)
216
+
217
+
218
+
219
+ buf(before)=(B
220
+
221
+ )
222
+
223
+ buf(after)=(B,)
224
+
225
+ sample=(A,B,)
226
+
227
+
228
+
229
+ buf(before)=(C
230
+
231
+ )
232
+
233
+ buf(after)=(C,)
234
+
235
+ sample=(A,B,C,)
236
+
237
+
238
+
239
+ buf(before)=(D
240
+
241
+ )
242
+
243
+ buf(after)=(D,)
244
+
245
+ sample=(A,B,C,D,)
246
+
247
+
248
+
249
+ loop end
250
+
251
+ sample=(A,B,C,D)
252
+
253
+ ```

1

表現ちょっと修正。

2020/11/01 09:42

投稿

hidezzz
hidezzz

スコア1248

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 配列bufの中身はfgetを呼ぶたびに上書きされるので、「A,B,C,D」のような文字列を得たいのだとしたら別の文字配列コピーしていくような処理が必要だと思います。
5
+ 配列bufの中身はfgetを呼ぶたびに上書きされるので、「A,B,C,D」のような文字列を得たいのだとしたらbufに読みこんだ後に別の文字配列コピーしていくような処理が必要だと思います。
6
6
 
7
7
 
8
8