回答編集履歴
3
微修正
answer
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
> なぜforループの二周目以降のデバッグでのstr[]の中身はstr == NULLであるのに、一週目のみstr[]の中身はstr == NULL ? \"(NULL)\": strであるか
|
2
2
|
|
3
|
+
初期状態:
|
4
|
+
|
5
|
+
> str[] = "str == NULL ? \"(NULL)\": str"
|
6
|
+
char *p, *q; p = str; // p は str(の先頭)を指す
|
7
|
+
|
3
8
|
■ 一週目:
|
4
|
-
str[] = "str == NULL ? \"(NULL)\": str"
|
5
9
|
|
6
10
|
> for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++);
|
7
11
|
|
2
微修正
answer
CHANGED
@@ -15,4 +15,5 @@
|
|
15
15
|
|
16
16
|
したがって str[] = "str == NULL **\0** \"(NULL)\": str" となる。
|
17
17
|
|
18
|
+
これ以降すなわち二週目以降、文字列は'\0'で終端されるため
|
18
|
-
|
19
|
+
printf("%s", str) で得られる出力は "str == NULL "
|
1
微修正
answer
CHANGED
@@ -5,13 +5,13 @@
|
|
5
5
|
|
6
6
|
> for (q = p; !(*q == '?' || *q == ':' || *q == 0); q++);
|
7
7
|
|
8
|
-
これにより、q は'?',':','\0' のいずれかを指す位置
|
8
|
+
これにより、q は'?',':','\0' のいずれかを指す位置となる。
|
9
|
-
つまり "str == NULL **?** \"(NULL)\": str" の'?'を指す。
|
9
|
+
つまり qは "str == NULL **?** \"(NULL)\": str" の'?'を指す。
|
10
10
|
|
11
11
|
> ch = *q;
|
12
|
-
*q = 0;
|
12
|
+
***q = 0**;
|
13
13
|
|
14
|
-
これにより、'?' が '\0' に書き換えられる。
|
14
|
+
これにより、q の指す '?' が '\0' に書き換えられる。
|
15
15
|
|
16
16
|
したがって str[] = "str == NULL **\0** \"(NULL)\": str" となる。
|
17
17
|
|