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。如果您的 arg 2 很简单

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

会好的。但是当索引不是零时,您必须将与号放在一起。

——皮特

于 2011-03-27T20:15:08.707 回答
1

有和 & 缺少 ... 非指针 <-> 指针

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 回答
1

ClientMacs 需要是指向字符(字符串指针)的指针数组,而不是字符数组。您不妨使用 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 回答
0

既然你已经标记了这个 C++,我建议不要使用strcmpstd::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 回答