回答編集履歴
1
誤字修正
test
CHANGED
@@ -8,9 +8,9 @@
|
|
8
8
|
|
9
9
|
---
|
10
10
|
|
11
|
-
0. 引数(`char *str)で指定された文字列先頭アドレスを返り値にセットする。(後で使います)
|
11
|
+
0. 引数(`char *str`)で指定された文字列先頭アドレスを返り値にセットする。(後で使います)
|
12
12
|
|
13
|
-
引数がNULLであれば、保存済みのNEXT
|
13
|
+
引数がNULLであれば、保存済みのstatic変数NEXTの値を先頭アドレスとして使う。
|
14
14
|
|
15
15
|
|
16
16
|
|
@@ -18,11 +18,11 @@
|
|
18
18
|
|
19
19
|
|
20
20
|
|
21
|
-
0. 区切り文字が無く、末端'\0'(NULL文字)まで行ったら次回に出力するトークン文字列は無いということなので、NEXT
|
21
|
+
0. 区切り文字が無く、末端'\0'(NULL文字)まで行ったら次回に出力するトークン文字列は無いということなので、static変数NEXTにNULLをセットし、5.へ。
|
22
22
|
|
23
23
|
|
24
24
|
|
25
|
-
0. 区切り文字があれば、区切り文字の位置に'\0'(NULL文字)を埋め込む。'\0'(NULL文字)を埋め込んだ次の位置を変数NEXTへ保存しておく。(次に`strtok`が呼ばれた時に使うことを想定)
|
25
|
+
0. 区切り文字があれば、区切り文字の位置に'\0'(NULL文字)を埋め込む。'\0'(NULL文字)を埋め込んだ次の位置をstatic変数NEXTへ保存しておく。(次に`strtok`が呼ばれた時に使うことを想定)
|
26
26
|
|
27
27
|
|
28
28
|
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
オリジナルの`strtok`は内部に次のトークンへのポインタを保存するので、リエントラント(再入可能)ではなく、マルチスレッドでのプログラミングで使えないという制限があります。
|
39
|
+
オリジナルの`strtok`は内部に次のトークン文字列へのポインタ(上記のNEXT変数)を保存するので、リエントラント(再入可能)ではなく、マルチスレッドでのプログラミングで使えないという制限があります。
|
40
40
|
|
41
41
|
|
42
42
|
|
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
|
48
48
|
|
49
|
-
|
49
|
+
`strtok`も`strtok_r`も、ひとつ落とし穴(?)があって、区切り文字が連続している場合に空文字列がトークン文字列として返されません。その為、CSV形式のようなもので、文字列長0のデータがあるようなケースでは期待したように動作しません。以下の例をご覧ください。
|
50
50
|
|
51
51
|
|
52
52
|
|