回答編集履歴
2
追記
answer
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
次のように書き換えることで、私の環境では正常に動作しました。
|
2
|
+
**追記:また、szの値を32に変更していました。simiteiさん、ありがとうございます。**
|
2
3
|
```C
|
3
4
|
while(fgets(str, sz, fr) != NULL){
|
4
5
|
fprintf(stdout, "%6d ", line);
|
1
追記
answer
CHANGED
@@ -16,4 +16,32 @@
|
|
16
16
|
strはこのときchar*型の変数ですから、sizeof(str)は同一環境では一定です。
|
17
17
|
|
18
18
|
kmmtprgmさんの環境では、sizeof(str)が8であるようです。
|
19
|
-
隠れているヌル文字を含め、8文字表示できているようですから。
|
19
|
+
隠れているヌル文字を含め、8文字取得・表示できているようですから。
|
20
|
+
|
21
|
+
---
|
22
|
+
ついでなので、ちょっと気になった点を追記します。
|
23
|
+
プログラム内のwhile文は、for文に置き換えることで読みやすくなるかと思います。
|
24
|
+
```C
|
25
|
+
for(int line = 1; fgets(str, sz, fr) != NULL; line++){
|
26
|
+
fprintf(stdout,"%6d ",line);
|
27
|
+
fputs(str, stdout);
|
28
|
+
}
|
29
|
+
```
|
30
|
+
|
31
|
+
あと、ファイルを複数開く場合、ファイルポインタの解放はもうちょっと複雑になります。
|
32
|
+
```C
|
33
|
+
FILE* fr = fopen("abc.txt", "r");
|
34
|
+
if(fr == NULL){
|
35
|
+
perror("ReadFileOpen");
|
36
|
+
return 0;
|
37
|
+
}
|
38
|
+
|
39
|
+
FILE* fw = fopen("def.txt", "w");
|
40
|
+
if(fw == NULL){
|
41
|
+
perror("WriteFileOpen");
|
42
|
+
fclose(fr);
|
43
|
+
return 0;
|
44
|
+
}
|
45
|
+
```
|
46
|
+
|
47
|
+
frのオープンは成功したが、fwのオープンに失敗した場合、frを解放せねばなりません。
|