回答編集履歴
2
追記
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
次のように書き換えることで、私の環境では正常に動作しました。
|
2
|
+
|
3
|
+
**追記:また、szの値を32に変更していました。simiteiさん、ありがとうございます。**
|
2
4
|
|
3
5
|
```C
|
4
6
|
|
1
追記
test
CHANGED
@@ -34,4 +34,60 @@
|
|
34
34
|
|
35
35
|
kmmtprgmさんの環境では、sizeof(str)が8であるようです。
|
36
36
|
|
37
|
-
隠れているヌル文字を含め、8文字表示できているようですから。
|
37
|
+
隠れているヌル文字を含め、8文字取得・表示できているようですから。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
---
|
42
|
+
|
43
|
+
ついでなので、ちょっと気になった点を追記します。
|
44
|
+
|
45
|
+
プログラム内のwhile文は、for文に置き換えることで読みやすくなるかと思います。
|
46
|
+
|
47
|
+
```C
|
48
|
+
|
49
|
+
for(int line = 1; fgets(str, sz, fr) != NULL; line++){
|
50
|
+
|
51
|
+
fprintf(stdout,"%6d ",line);
|
52
|
+
|
53
|
+
fputs(str, stdout);
|
54
|
+
|
55
|
+
}
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
あと、ファイルを複数開く場合、ファイルポインタの解放はもうちょっと複雑になります。
|
62
|
+
|
63
|
+
```C
|
64
|
+
|
65
|
+
FILE* fr = fopen("abc.txt", "r");
|
66
|
+
|
67
|
+
if(fr == NULL){
|
68
|
+
|
69
|
+
perror("ReadFileOpen");
|
70
|
+
|
71
|
+
return 0;
|
72
|
+
|
73
|
+
}
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
FILE* fw = fopen("def.txt", "w");
|
78
|
+
|
79
|
+
if(fw == NULL){
|
80
|
+
|
81
|
+
perror("WriteFileOpen");
|
82
|
+
|
83
|
+
fclose(fr);
|
84
|
+
|
85
|
+
return 0;
|
86
|
+
|
87
|
+
}
|
88
|
+
|
89
|
+
```
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
frのオープンは成功したが、fwのオープンに失敗した場合、frを解放せねばなりません。
|