-4

私は次のコードを持っています:

char* id = someFunction();
if (id == "0x01") {
    id = ....
}

したがって、基本的に必要なのは、id変数に文字列値「0x01」があるかどうかを確認し、ある場合は、{0x01, 0x00}代わりにシステムシンボルを渡すことです。

ご協力いただきありがとうございます。

4

7 に答える 7

4

を使用しますstrcmp()

この機能はで利用可能ですstring.h

Example:

printf( "Enter your name: " );
scanf( "%s", name );
if( strcmp( name, "Mary" ) == 0 )
  printf( "Hello, Dr. Mary!\n" );
于 2012-10-12T11:28:14.653 に答える
4

これがC++の場合は、を使用しstd::stringます。それ以外の場合は、を使用strcmpして比較します。

C /C++は言語ではありません。本当に必要な場合を除いて、両方のタグの使用を中止してください。

于 2012-10-12T11:28:41.143 に答える
3

使い始めるstd::stringと、そのようなことで問題はありません:

std::string id = someFunction();
if (id == "0x01") {
    id = "0x00";
}
于 2012-10-12T11:28:45.230 に答える
1

を使用する必要がありますstrcmp。またはそのより安全な対応物strncmp

このようなもの:

if (!strncmp(id, "0x01", 10)) {
    // they're equal!
}
于 2012-10-12T11:28:31.737 に答える
1

文字列を。と比較することはできません==

お使いのOSなどに応じて、std::stringまたはCstrcmp()機能を使用できます

DavidRFは、文字列をと比較できるとコメントしています==。彼は100%正しいです。

printf("%s\n", ((char *)"hello" == (char *)"hello") ? "yes" : "no")

使用==とは、ポインタを比較することです。ポインタが等しい場合は、文字列が等しいことがわかります。これを使用して、文字列比較全体を短絡することができます(ただし、コンパイラよりも賢くしようとすることに国境を接します-良いものstrcmpにはすでにこのチェックが含まれています)。ポインタが等しくない場合、ポインタが指している文字列については何もわかりません(ポインタはまだ等しい可能性があります)。

上記の特定のprintfサンプルは本当に悪いです:私は最近C標準を読んでいませんが、メモリが正しく機能する場合、リテラルをテーブルに入れることはコンパイラ固有の動作です。さらに悪いことに、それはコンパイラのオプション(最適化レベルなど)に依存すると思います。この行はデバッグモードで動作し、リリースモードでは異なる結果をもたらす可能性があります。これは決して良いことではありません。

于 2012-10-12T11:28:40.803 に答える
0

strcmp()文字列を比較するには、この関数を使用する必要があります。

if (strcmp(id,"0x01") ==0) {
   // match found.
于 2012-10-12T11:28:47.170 に答える
0

これがCの場合、strcmp関数が必要です。

if (!strcmp(id, "0x01")) {
    // Do the id == "0x01" code
}
else {
    // Do the id != "0x01" code
}

strcmp()文字列間の関係を示す整数値を返します。

  1. ゼロ値は、両方の文字列が等しいことを示します。
  2. ゼロより大きい値は、一致しない最初の文字の値がstr2( "0x01")よりもstr1(id)の方が大きいことを示します。
  3. また、ゼロ未満の値はその逆を示します。
于 2012-10-12T11:29:26.230 に答える