2026-08-22
is_command.c
#include <string.h>
#include <stdbool.h>
bool is_command(const char *s) {
return s == "quit";
}
is_command("quit")を呼び出しても、ほとんどの場合falseが返ります。なぜでしょうか?どう直せばよいですか?
Answer
s == "quit"はポインタ同士を比較しており、文字列の中身ではなくアドレスを比較しています。たとえsが"quit"というテキストを指していても、それが別のメモリ上にある文字列リテラルなら一致しません(コンパイラの最適化でたまたま一致することはありますが、それに依存すべきではありません)。strcmp(s, "quit") == 0に直してください。