Namaran

Code daily. Without assist.

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に直してください。