teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

修正案削除

2018/10/24 15:35

投稿

set0gut1
set0gut1

スコア2413

answer CHANGED
@@ -11,25 +11,4 @@
11
11
 
12
12
  `tmp[i]` に `buf` を何回か入れてますが、 `buf` は毎回同じ値です。
13
13
  つまり出力するとき、最後に読み込んだ文字列が複数回出力されます。
14
- これはまた別のバグなので頑張ってくださいbb
14
+ これはまた別のバグなので頑張ってくださいbb
15
-
16
- -----------
17
-
18
- 追記: コード修正案
19
- char 配列が何個かあればいいので例えば buf を二次配列にするとかで対応できます。
20
-
21
- ```
22
- #include<stdio.h>
23
-
24
- int main(){
25
- char buf[3][100];
26
- int count = 0;
27
- while (fgets(buf[count], sizeof(buf[count]), stdin) != NULL) {
28
- count = (count + 1) % 3;
29
- }
30
- for (int i = 0; i < 3; i++) {
31
- printf("%s", buf[i]);
32
- }
33
- return 0;
34
- }
35
- ```

2

修正案追記

2018/10/24 15:35

投稿

set0gut1
set0gut1

スコア2413

answer CHANGED
@@ -11,4 +11,25 @@
11
11
 
12
12
  `tmp[i]` に `buf` を何回か入れてますが、 `buf` は毎回同じ値です。
13
13
  つまり出力するとき、最後に読み込んだ文字列が複数回出力されます。
14
- これはまた別のバグなので頑張ってくださいbb
14
+ これはまた別のバグなので頑張ってくださいbb
15
+
16
+ -----------
17
+
18
+ 追記: コード修正案
19
+ char 配列が何個かあればいいので例えば buf を二次配列にするとかで対応できます。
20
+
21
+ ```
22
+ #include<stdio.h>
23
+
24
+ int main(){
25
+ char buf[3][100];
26
+ int count = 0;
27
+ while (fgets(buf[count], sizeof(buf[count]), stdin) != NULL) {
28
+ count = (count + 1) % 3;
29
+ }
30
+ for (int i = 0; i < 3; i++) {
31
+ printf("%s", buf[i]);
32
+ }
33
+ return 0;
34
+ }
35
+ ```

1

別のバグについて追記

2018/10/24 15:31

投稿

set0gut1
set0gut1

スコア2413

answer CHANGED
@@ -3,4 +3,12 @@
3
3
  僕の手元でやると `0x7ffee3fc7440` が `64` に切り詰められました。
4
4
  で printf の %s が `64` を読もうとして segmentation fault という流れですね。
5
5
 
6
- `char tmp [100];` を `char* tmp [100];` にすると直ります。
6
+ `char tmp [100];` を `char* tmp [100];` にすると直ります。
7
+
8
+ -----------
9
+
10
+ 追記
11
+
12
+ `tmp[i]` に `buf` を何回か入れてますが、 `buf` は毎回同じ値です。
13
+ つまり出力するとき、最後に読み込んだ文字列が複数回出力されます。
14
+ これはまた別のバグなので頑張ってくださいbb