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

回答編集履歴

2

誤字修正

2020/07/05 17:48

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  解決したコードというのを見ました。
5
5
 
6
- 私のコードはコピペはされていました、利用されていません。
6
+ 私のコードはコピペはされていました、利用されていません。
7
7
  関数 drawMemo は呼び出されもしていません。
8
8
  ユーザからの入力があるたびに毎回 readMemo と findMemo が
9
9
  呼び出されていますが、検索結果は全く利用されていません。
@@ -112,7 +112,7 @@
112
112
  SetGraphMode(1500, 780, 32); // ウィンドウの大きさを指定
113
113
  ChangeWindowMode(TRUE); // 全画面ではなくウインドウを使用
114
114
  if (DxLib_Init() == -1) return -1; // DXライブラリの初期化
115
- SetFontSize(33); // サイズの変更
115
+ SetFontSize(33); // フォントサイズの変更
116
116
  SetDrawScreen(DX_SCREEN_BACK); // 描画先を裏にする
117
117
  int InputHandle = MakeKeyInput(150, FALSE, FALSE, FALSE);
118
118
  SetActiveKeyInput(InputHandle); // 作成したキー入力ハンドルをアクティブにする
@@ -212,7 +212,7 @@
212
212
  return 0;
213
213
  }
214
214
  ```
215
- **追記*
215
+ **追記**
216
216
  基礎の基礎が分かっていないんですね。
217
217
 
218
218
  長さ3 の文字列 "abc" は { 'a', 'b', 'c', '\0' } の 4バイト。

1

文字列の比較の説明を追加

2020/07/05 17:48

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -211,4 +211,56 @@
211
211
  DxLib_End(); // DXライブラリの使用終了
212
212
  return 0;
213
213
  }
214
- ```
214
+ ```
215
+ **追記*
216
+ 基礎の基礎が分かっていないんですね。
217
+
218
+ 長さ3 の文字列 "abc" は { 'a', 'b', 'c', '\0' } の 4バイト。
219
+ 長さ1 の文字列 "a" は { 'a', '\0' } の 2バイト。
220
+ 長さ0 の文字列 "" は { '\0' } の 1バイト。
221
+ "\0" は { '\0', '\0' } の 2バイト。でも strlen("\0") は 0文字。
222
+
223
+ 次に、文字列の比較は == では出来ません。
224
+ if (buffer == "abc") はダメで、
225
+ if (strcmp(buffer, "abc") == 0) と書きます。
226
+
227
+ buffer が空(0文字)というのは、buffer[0] が '\0' ということ。
228
+ if (buffer[0] == '\0') で調べることができます。
229
+ if (strlen(buffer) == 0) や if (strcmp(buffer, "") == 0) でも
230
+ 分かりますが、関数を呼び出すのは無駄です。
231
+
232
+ こんなことも理解していなくて、アプリを作ろうとよく思いますね。
233
+
234
+ さて、buffer が空の時、if (strstr(buffer2, buffer)) が真になりますから
235
+ その先には行きません。その前に調べないといけないでしょう。
236
+ ```diff
237
+ }
238
+ }
239
+ }
240
+ - if (strstr(buffer2, buffer)) {
241
+ + if (buffer[0] == '\0') {
242
+ + hyouzi = 0;
243
+ + }
244
+ + else if (strstr(buffer2, buffer)) {
245
+ hyouzi = 1;
246
+ break;
247
+ }
248
+ ```
249
+
250
+ ところで、どのような動作を期待しているのでしょうか?
251
+ 次のような操作で、memo.txt に追加できることは確認できたのですが、
252
+ 本当にこのような動作を期待しているのでしょうか?
253
+
254
+ 空の memo.txt を用意して、プログラムを起動します。
255
+
256
+ 「覚えて」エンター
257
+ 「→ジュニーは戦場へ行くという映画は面白い。」エンター
258
+ 「覚えて」エンター
259
+ 「→明日は晴れ。」エンター
260
+ 「覚えて」エンター
261
+ 「→どすこいはお相撲。」エンター
262
+ 「晴れ」エンター
263
+
264
+ 「buffer2 = →明日は晴れ。」と表示される。
265
+ memo.txt には、入力文字列が追加されている。
266
+ 「→」がないと追加されません。