回答編集履歴
3
誤字修正(行松→行末)
answer
CHANGED
@@ -75,7 +75,7 @@
|
|
75
75
|
|
76
76
|
printf( "buf(before)=(%s)\n", buf );
|
77
77
|
|
78
|
-
/* 行
|
78
|
+
/* 行末の改行文字をカンマに置き換える */
|
79
79
|
buf[ strlen( buf ) - 1 ] = ',';
|
80
80
|
|
81
81
|
printf( "buf(after)=(%s)\n", buf );
|
2
コメントを受けて、具体的なコードを追記した
answer
CHANGED
@@ -43,4 +43,85 @@
|
|
43
43
|
loop end
|
44
44
|
buf=(D
|
45
45
|
)
|
46
|
+
```
|
47
|
+
|
48
|
+
#コメントを受けて追記
|
49
|
+
|
50
|
+
sampleという文字列配列に格納する処理の一例を書いてみました。
|
51
|
+
printf()で途中経過を表示するようにしてみたので確認してみてください。
|
52
|
+
|
53
|
+
```C
|
54
|
+
#include <stdio.h>
|
55
|
+
#include <errno.h>
|
56
|
+
#include <string.h>
|
57
|
+
|
58
|
+
int main(void)
|
59
|
+
{
|
60
|
+
|
61
|
+
FILE *fp;
|
62
|
+
char buf[50]; /* 制限: 入力ファイルの1行の長さは49文字以外でなければならない */
|
63
|
+
char sample[1024]; /* 制限: 最終的な結果文字列のサイズは1023文字に収まらなければならない */
|
64
|
+
|
65
|
+
fp = fopen("sample.txt","r");
|
66
|
+
if ( fp == NULL ) {
|
67
|
+
perror( "fopen" );
|
68
|
+
return 1;
|
69
|
+
}
|
70
|
+
|
71
|
+
/* sampleを文字列長が0の文字列となるように初期化する */
|
72
|
+
sample[0] = '\0';
|
73
|
+
|
74
|
+
while(fgets(buf,sizeof(buf),fp) != NULL){
|
75
|
+
|
76
|
+
printf( "buf(before)=(%s)\n", buf );
|
77
|
+
|
78
|
+
/* 行松の改行文字をカンマに置き換える */
|
79
|
+
buf[ strlen( buf ) - 1 ] = ',';
|
80
|
+
|
81
|
+
printf( "buf(after)=(%s)\n", buf );
|
82
|
+
|
83
|
+
/* sampleの末尾に現在のbufを連結する */
|
84
|
+
strcat( sample, buf );
|
85
|
+
|
86
|
+
printf( "sample=(%s)\n", sample );
|
87
|
+
|
88
|
+
printf( "\n" );
|
89
|
+
}
|
90
|
+
|
91
|
+
fclose(fp);
|
92
|
+
|
93
|
+
/* sampleの末尾にあるカンマを削除する */
|
94
|
+
sample[ strlen( sample ) - 1 ] = '\0';
|
95
|
+
|
96
|
+
printf( "loop end\n" );
|
97
|
+
printf( "sample=(%s)\n", sample );
|
98
|
+
|
99
|
+
return 0;
|
100
|
+
}
|
101
|
+
```
|
102
|
+
|
103
|
+
```terminal
|
104
|
+
$ ./hoge
|
105
|
+
buf(before)=(A
|
106
|
+
)
|
107
|
+
buf(after)=(A,)
|
108
|
+
sample=(A,)
|
109
|
+
|
110
|
+
buf(before)=(B
|
111
|
+
)
|
112
|
+
buf(after)=(B,)
|
113
|
+
sample=(A,B,)
|
114
|
+
|
115
|
+
buf(before)=(C
|
116
|
+
)
|
117
|
+
buf(after)=(C,)
|
118
|
+
sample=(A,B,C,)
|
119
|
+
|
120
|
+
buf(before)=(D
|
121
|
+
)
|
122
|
+
buf(after)=(D,)
|
123
|
+
sample=(A,B,C,D,)
|
124
|
+
|
125
|
+
loop end
|
126
|
+
sample=(A,B,C,D)
|
46
127
|
```
|
1
表現ちょっと修正。
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
配列bufは質問で書かれている意図通りの結果にはなりません。
|
2
2
|
|
3
|
-
配列bufの中身はfgetを呼ぶたびに上書きされるので、「A,B,C,D」のような文字列を得たいのだとしたら別の文字配列
|
3
|
+
配列bufの中身はfgetを呼ぶたびに上書きされるので、「A,B,C,D」のような文字列を得たいのだとしたらbufに読みこんだ後に別の文字配列へコピーしていくような処理が必要だと思います。
|
4
4
|
|
5
5
|
|
6
6
|
ソースコードにprintf()を入れてあげれば手っ取り早く確認できると思います。
|