我需要有关该脚本的帮助。
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风格演员或 功能式演员
当我尝试编译它时。
答案 0 :(得分: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]
没关系。但是当索引不是零时,你必须把它放在&符号上。
- 皮特
答案 1 :(得分:1)
有和&amp;缺失...非指针&lt; - &gt;指针
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;
}
也许
答案 2 :(得分: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;
}
}
}
你的命名通常非常糟糕,但我没有改变它。
答案 3 :(得分: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;
}
答案 4 :(得分:1)
我认为你并不完全理解字符串(或指针)在C中是如何工作的。
您正在尝试将字符数组的单个字符与传入的字符串进行比较:
if(!strcmp(MacID, ClientMacs[x])
答案 5 :(得分: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地址(例如,在以太网数据包中)是否匹配其中一个那些(例如,防火墙的顺序,确保只接受来自已知来源的数据包)。