11

私には2つの変数があります:

char charTime[] = "TIME";
char buf[] = "SOMETHINGELSE";

これら2つが等しいかどうかを確認したい...使用charTime == bufが機能しない。

私は何を使うべきですか、そして誰かがなぜ使うこと==がうまくいかないのか説明できますか?

このアクションはCとC++で異なりますか?

4

5 に答える 5

24
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);

各配列の最初の文字のアドレスを比較しようとするため、使用==は機能しません(明らかに、それらは等しくありません)。両方のアレイの内容を比較することはありません。

于 2010-03-13T23:13:13.060 に答える
2

cでは、string.hのstrcmp関数を使用できます。これらが等しい場合は、0を返します。

#include <string.h>

if( !strcmp( charTime, buf ))
于 2010-03-13T23:13:21.920 に答える
1

==配列の名前を使用する式では、それぞれの配列の開始点を指すようにchar減衰します。char*次に、配列の実際の内容ではなく、ポインタ自体の値に関して比較が実行されます。

==同じ場所を指す2つのポインタに対してのみtrueを返し、それ以外の場合は、同じ内容の2つの配列を指している場合でもfalseを返します。

必要なのは標準ライブラリ関数strcmpです。strcmpこの式は、配列に同じ内容が含まれている場合にtrueと評価されます(安全に機能するには、両方の配列に存在する必要がある終了ヌル文字まで)。

strcmp(charTime, buf) == 0
于 2010-03-13T23:16:10.137 に答える
0

forループでそれらをチェックしてください。等しくない場合は、各文字のASCII番号を取得します。

于 2010-03-13T23:11:45.247 に答える
0

あなたは身元charTimeを確認していbufます。等しいかどうかを確認するには、一方の配列の各文字をループして、もう一方の配列の関連する文字と比較します。

于 2010-03-13T23:13:55.897 に答える