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

回答編集履歴

2

修正

2018/06/11 13:43

投稿

mpyw
mpyw

スコア5223

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` のアドレスを表す `*char` もまた数値です。32ビット環境では `-2147483648` ~ `2147483647`,64ビット環境では `-9223372036854775808` ~ `9223372036854775807` になります。
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

修正

2018/06/11 13:42

投稿

mpyw
mpyw

スコア5223

answer CHANGED
@@ -59,11 +59,11 @@
59
59
  - 「探される文字列」の先頭アドレスを1つずつずらしていく
60
60
  - 現在のアドレスから「探す文字列」の長さのぶんだけ `strncmp` 関数にチェックさせる
61
61
 
62
- 1回目: `Thi` から `pen` を探
62
+ 1回目: `Thi` `pen` が一致るか?
63
- 2回目: `his` から `pen` を探
63
+ 2回目: `his` `pen` が一致るか?
64
- 3回目: `is ` から `pen` を探
64
+ 3回目: `is ` `pen` が一致るか?
65
- 4回目: `s a` から `pen` を探
65
+ 4回目: `s a` `pen` が一致るか?
66
- 5回目: ` a ` から `pen` を探
66
+ 5回目: ` a ` `pen` が一致るか?
67
- 6回目: `a p` から `pen` を探
67
+ 6回目: `a p` `pen` が一致るか?
68
- 7回目: ` pe` から `pen` を探
68
+ 7回目: ` pe` `pen` が一致るか?
69
- 8回目: `pen` から `pen` を探
69
+ 8回目: `pen` `pen` が一致るか?