我正在创建一个服务器/客户端套接字程序,我正在制作一个打印服务器输入的方法。
这是我的代码:
void *admin_handler (void *ptr) {
char strBuf [100000];
const char strExit [20] = "Server: terminated.";
while(1) {
scanf ("%s", strBuf);
int i;
for (i=0; i < nClient; i++){
if (strBuf == "Exit"){
write (nFDList [i], strExit, strlen (strExit) + 1);
}
else {
write (nFDList [i], strBuf, strlen (strBuf) + 1);
}
}
};
}
但是,当我执行时,即使我输入“Exit”,它仍会执行else语句。当我输入“Exit”时,如何修改要执行的if语句?
答案 0 :(得分:2)
比较 C 中字符串的最佳方法是使用strcmp()
(如果有人对未知字符串的安全感兴趣,则使用strncmp()
。)
等于运算符==
在它们“衰减”到指针之后直接比较操作数;指针不会改变,当然也不同。相反,strcmp()
检查指向的内存的内容,可能相等。
另外, Java: ==
中存在同样的问题,检查双方是否是相同的对象,类似于C等价物,而{ {1}}检查对象内容,类似于.equals()
。
C#为字符串重载strcmp()
,以便确实查看内容,这对于可能运算符重载的语言非常有意义(C不是):几乎不需要测试对象的身份,正如我们所见,这是一个常见的错误来源。