私には2つの変数があります:
char charTime[] = "TIME";
char buf[] = "SOMETHINGELSE";
これら2つが等しいかどうかを確認したい...使用charTime == buf
が機能しない。
私は何を使うべきですか、そして誰かがなぜ使うこと==
がうまくいかないのか説明できますか?
このアクションはCとC++で異なりますか?
char charTime[] = "TIME"; char buf[] = "SOMETHINGELSE";
C ++およびC(Cの場合は削除std::
):
bool equal = (std::strcmp(charTime, buf) == 0);
しかし、本当のC ++の方法:
std::string charTime = "TIME", buf = "SOMETHINGELSE";
bool equal = (charTime == buf);
各配列の最初の文字のアドレスを比較しようとするため、使用==
は機能しません(明らかに、それらは等しくありません)。両方のアレイの内容を比較することはありません。
cでは、string.hのstrcmp関数を使用できます。これらが等しい場合は、0を返します。
#include <string.h>
if( !strcmp( charTime, buf ))
==
配列の名前を使用する式では、それぞれの配列の開始点を指すようにchar
減衰します。char*
次に、配列の実際の内容ではなく、ポインタ自体の値に関して比較が実行されます。
==
同じ場所を指す2つのポインタに対してのみtrueを返し、それ以外の場合は、同じ内容の2つの配列を指している場合でもfalseを返します。
必要なのは標準ライブラリ関数strcmp
です。strcmp
この式は、配列に同じ内容が含まれている場合にtrueと評価されます(安全に機能するには、両方の配列に存在する必要がある終了ヌル文字まで)。
strcmp(charTime, buf) == 0
forループでそれらをチェックしてください。等しくない場合は、各文字のASCII番号を取得します。
あなたは身元charTime
を確認していbuf
ます。等しいかどうかを確認するには、一方の配列の各文字をループして、もう一方の配列の関連する文字と比較します。