私は次のコードを持っています:
char* id = someFunction();
if (id == "0x01") {
id = ....
}
したがって、基本的に必要なのは、id
変数に文字列値「0x01」があるかどうかを確認し、ある場合は、{0x01, 0x00}
代わりにシステムシンボルを渡すことです。
ご協力いただきありがとうございます。
私は次のコードを持っています:
char* id = someFunction();
if (id == "0x01") {
id = ....
}
したがって、基本的に必要なのは、id
変数に文字列値「0x01」があるかどうかを確認し、ある場合は、{0x01, 0x00}
代わりにシステムシンボルを渡すことです。
ご協力いただきありがとうございます。
を使用しますstrcmp()
。
この機能はで利用可能ですstring.h
Example:
printf( "Enter your name: " );
scanf( "%s", name );
if( strcmp( name, "Mary" ) == 0 )
printf( "Hello, Dr. Mary!\n" );
これがC++の場合は、を使用しstd::string
ます。それ以外の場合は、を使用strcmp
して比較します。
C /C++は言語ではありません。本当に必要な場合を除いて、両方のタグの使用を中止してください。
使い始めるstd::string
と、そのようなことで問題はありません:
std::string id = someFunction();
if (id == "0x01") {
id = "0x00";
}
を使用する必要がありますstrcmp
。またはそのより安全な対応物strncmp
。
このようなもの:
if (!strncmp(id, "0x01", 10)) {
// they're equal!
}
文字列を。と比較することはできません==
。
お使いのOSなどに応じて、std::string
またはCstrcmp()
機能を使用できます
DavidRFは、文字列をと比較できるとコメントしています==
。彼は100%正しいです。
printf("%s\n", ((char *)"hello" == (char *)"hello") ? "yes" : "no")
使用==
とは、ポインタを比較することです。ポインタが等しい場合は、文字列が等しいことがわかります。これを使用して、文字列比較全体を短絡することができます(ただし、コンパイラよりも賢くしようとすることに国境を接します-良いものstrcmp
にはすでにこのチェックが含まれています)。ポインタが等しくない場合、ポインタが指している文字列については何もわかりません(ポインタはまだ等しい可能性があります)。
上記の特定のprintf
サンプルは本当に悪いです:私は最近C標準を読んでいませんが、メモリが正しく機能する場合、リテラルをテーブルに入れることはコンパイラ固有の動作です。さらに悪いことに、それはコンパイラのオプション(最適化レベルなど)に依存すると思います。この行はデバッグモードで動作し、リリースモードでは異なる結果をもたらす可能性があります。これは決して良いことではありません。
strcmp()
文字列を比較するには、この関数を使用する必要があります。
if (strcmp(id,"0x01") ==0) {
// match found.
これがCの場合、strcmp関数が必要です。
if (!strcmp(id, "0x01")) {
// Do the id == "0x01" code
}
else {
// Do the id != "0x01" code
}
strcmp()
文字列間の関係を示す整数値を返します。