回答編集履歴
3
追記
answer
CHANGED
@@ -11,7 +11,19 @@
|
|
11
11
|
}
|
12
12
|
> ```
|
13
13
|
|
14
|
-
『ここ』の行は、if文の条件を満たそうが満たすまいが実行され
|
14
|
+
『ここ』の行は、if文の条件を満たそうが満たすまいが実行され、
|
15
15
|
breakが無かった場合iの値は10になっているので、str1[10]の値を代入していることになります。
|
16
16
|
|
17
|
-
str1には10要素しかありませんので、範囲外アクセスが発生し未定義の動作を引き起こします。
|
17
|
+
str1には10要素しかありませんので、範囲外アクセスが発生し未定義の動作を引き起こします。
|
18
|
+
|
19
|
+
---
|
20
|
+
置換候補が見つかった時点でbreakすること自体は、効率上良いアイデアです。
|
21
|
+
問題は『if文での判定』と『置換操作』を分離してしまったことです。
|
22
|
+
|
23
|
+
次のように書けば問題無いでしょう。
|
24
|
+
```C
|
25
|
+
if (inp[j] == str[i]) {
|
26
|
+
inp[j] = str1[i];
|
27
|
+
break;
|
28
|
+
}
|
29
|
+
```
|
2
追記
answer
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
> 前者と後者のコードは一見何も違いが無いんじゃないか
|
2
2
|
|
3
|
+
後者のコードには明らかなバグがあります。
|
4
|
+
|
3
5
|
> ```C
|
4
6
|
for (j = 0; j < 100; j++) {
|
5
7
|
for (i = 0; i < 10; i++) {
|
@@ -10,4 +12,6 @@
|
|
10
12
|
> ```
|
11
13
|
|
12
14
|
『ここ』の行は、if文の条件を満たそうが満たすまいが実行されます。
|
13
|
-
break
|
15
|
+
breakが無かった場合iの値は10になっているので、str1[10]の値を代入していることになります。
|
16
|
+
|
17
|
+
str1には10要素しかありませんので、範囲外アクセスが発生し未定義の動作を引き起こします。
|
1
修正
answer
CHANGED
@@ -10,4 +10,4 @@
|
|
10
10
|
> ```
|
11
11
|
|
12
12
|
『ここ』の行は、if文の条件を満たそうが満たすまいが実行されます。
|
13
|
-
breakしなかった場合iの値は
|
13
|
+
breakしなかった場合iの値は10になっているので、str1[10]の値を代入していることになります。
|