回答編集履歴
2
修正
answer
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
- 整数としておなじみの `int` は一般的には値の範囲が `-2147483648` ~ `2147483647` の数値です。(環境に左右されます)
|
15
15
|
- 文字としておなじみの `char` も実は値の範囲が `-128` ~ `127` の数値です。各番号に形式上文字が割り当てられているだけの話です。[ASCII文字コード - IT用語辞典](http://e-words.jp/p/r-ascii.html)
|
16
|
-
- `char` のアドレスを表す `
|
16
|
+
- `char` のアドレスを表す `char *` もまた数値です。32ビット環境では `-2147483648` ~ `2147483647`,64ビット環境では `-9223372036854775808` ~ `9223372036854775807` になります。
|
17
17
|
|
18
18
|
ここでたとえば `text` が `0x80000000` 番地(16進数表記)から始まっていると仮定すると,各アドレスに対応するデータは以下のようになります。
|
19
19
|
|
@@ -52,7 +52,7 @@
|
|
52
52
|
0x8000001f 0 (\0)
|
53
53
|
```
|
54
54
|
|
55
|
-
C言語においては `int` 型に限らず `char` や `char*` も加算・減算することができます。**今回は `char*` の加算を利用しています。**
|
55
|
+
C言語においては `int` 型に限らず `char` や `char *` も加算・減算することができます。**今回は `char *` の加算を利用しています。**
|
56
56
|
|
57
57
|
一般的にC言語における文字列はNULL終端している必要がありますが,`strncmp`に関しては,「探される文字列」側はNULL終端している必要がありません。([strncmp](http://www9.plala.or.jp/sgwr-t/lib/strncmp.html) を参照)そのため,今回のコードで書いているような以下のアルゴリズムが利用できます。
|
58
58
|
|
1
修正
answer
CHANGED
@@ -59,11 +59,11 @@
|
|
59
59
|
- 「探される文字列」の先頭アドレスを1つずつずらしていく
|
60
60
|
- 現在のアドレスから「探す文字列」の長さのぶんだけ `strncmp` 関数にチェックさせる
|
61
61
|
|
62
|
-
1回目: `Thi`
|
62
|
+
1回目: `Thi` と `pen` が一致するか?
|
63
|
-
2回目: `his`
|
63
|
+
2回目: `his` と `pen` が一致するか?
|
64
|
-
3回目: `is `
|
64
|
+
3回目: `is ` と `pen` が一致するか?
|
65
|
-
4回目: `s a`
|
65
|
+
4回目: `s a` と `pen` が一致するか?
|
66
|
-
5回目: ` a `
|
66
|
+
5回目: ` a ` と `pen` が一致するか?
|
67
|
-
6回目: `a p`
|
67
|
+
6回目: `a p` と `pen` が一致するか?
|
68
|
-
7回目: ` pe`
|
68
|
+
7回目: ` pe` と `pen` が一致するか?
|
69
|
-
8回目: `pen`
|
69
|
+
8回目: `pen` と `pen` が一致するか?
|