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

回答編集履歴

3

微修正

2021/08/07 00:27

投稿

episteme
episteme

スコア16612

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

微修正

2021/08/07 00:27

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -15,4 +15,5 @@
15
15
 
16
16
  したがって str[] = "str == NULL **\0** \"(NULL)\": str" となる。
17
17
 
18
+ これ以降すなわち二週目以降、文字列は'\0'で終端されるため
18
- これ以降すなわち二週目以降、printf("%s", str) で得られる出力は "str == NULL "
19
+ printf("%s", str) で得られる出力は "str == NULL "

1

微修正

2021/08/06 02:24

投稿

episteme
episteme

スコア16612

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