1

そのスクリプトについて助けが必要です。

BOOL Checking(LPCSTR MacID) {
    char ClientMacs[18] = { "11:22:33:44:55:66",};

    for(int x=0; x < 10; x++) {
        if(!strcmp(MacID, ClientMacs[x])) {
            printf(MacID," Successed!");
            return true;
        }
    }

    return false;
}

私は得ています

エラー C2664: 'strcmp': パラメーター 2 を 'char' から 'const char *' に変換できません 整数型からポインター型への変換には、reinterpret_cast、C スタイルのキャスト、または関数スタイルのキャストが必要です

コンパイルしようとすると。

4

6 に答える 6

3

いいえ

if(!strcmp(MacID, ClientMacs[x])) {    }

しかし

if(!strcmp(MacID, &ClientMacs[x])) { ... }

Arg 2 は char * でなければなりませんが、char として持っています。引数 2 が単純な場合

  ClientMacs  // compiler understands that this is shorthand for &ClientMacs[0]

大丈夫でしょう。ただし、インデックスがゼロ以外の場合は、アンパサンドを付ける必要があります。

-- ピート

于 2011-03-27T20:15:08.707 に答える
1

ClientMacs は、char の配列ではなく、char へのポインターの配列 (文字列ポインター) である必要があります。関数パラメーターにも使用したため、LPCSTR typedef を使用することもできます。

これを試して:

BOOL Checking(LPCSTR MacID) {

    LPCSTR ClientMacs[18] = { "11:22:33:44:55:66", [put the other 9 (or is it 17?) MAC address strings here]};

    for(int x=0; x < 10; x++) {

         if(!strcmp(MacID, ClientMacs[x])) {
            printf(MacID," Successed!");
            return true;
         }
    }
}

あなたのネーミングは一般的にかなりひどいものですが、私はそれを変更していません。

于 2011-03-27T20:13:10.597 に答える
1
if(!strcmp(MacID, ClientMacs[x]))
                // ^^^^^^^^^^^ gives the character at index x

おそらくあなたが意味したのは-

if(!strcmp(MacID, &ClientMacs[x]))
                //^  Added & symbol

文面printfを考えると、文字ごとに比較する必要はないと思います。ループは必要ありません。これは -

 for(int x=0; x < 10; x++) {
    if(!strcmp(MacID, ClientMacs[x])) {
        printf(MacID," Successed!");
        return true;
    }
}

に凝縮 -

if(!strcmp(MacID, ClientMacs)) {  // Changed ClientMacs[x] to ClientMacs
    printf(MacID," Successed!");
    return true;
}
于 2011-03-27T20:13:55.353 に答える
1

C で文字列 (またはポインター) がどのように機能するかを十分に理解していないと思います。

文字配列の単一の文字を、渡された文字列と比較しようとしています:

if(!strcmp(MacID, ClientMacs[x])
于 2011-03-27T20:15:55.313 に答える
1

There's and missing ... 非ポインター <-> ポインター

BOOL Checking(LPCSTR MacID) {

    const char* ClientMacs[18] = { "11:22:33:44:55:66",};

     for(int x=0; x < 10; x++) {

         if(!strcmp(MacID, ClientMacs[x])) {

              printf(MacID," Successed!");

              return true;

         }

    }

    return false;

}

多分

于 2011-03-27T20:09:35.123 に答える
0

この C++ にタグを付けたのでstrcmp、まったく使用しないことをお勧めしますstd::string。代わりに次を使用します。

std::set<std::string> ClientMacs;

ClientMacs.insert("11:22:33:44:55:66");
 // presumably insert more MAC addresses here


bool check(std::string const &MacID) {    
    if (ClientMacs.find(MacID) != ClienMacs.end()) {
        std::cout << "Success!";
        return true;
    }
}

ただし、ここで何を達成しようとしているのかが完全に明確ではないことを付け加えておきます。私の推測では、あなたは考えられる MAC アドレス (例えば、ローカルネットワーク内のすべてのコンピュータ) のリストを持っていて、受け取った (例えば、イーサネットパケットで) MAC アドレスが次のいずれかに一致することを確認しようとしているとします。それら (たとえば、既知の送信元からのパケットのみが受け入れられることを保証するファイアウォールのようなもの)。

于 2011-03-27T20:18:00.070 に答える