作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个服务器/客户端套接字程序,并且正在制作一种打印服务器输入的方法。
这是我的代码:
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 语句。如何修改 if 语句以在输入“退出”时执行?
最佳答案
在 C 中比较字符串的最佳方法是使用 strcmp()
(如果对未知的安全性感兴趣,则使用 strncmp()
字符串)。
相等运算符 ==
直接比较操作数,在它们“衰减”为指针之后;指针不会改变,当然是不同的。相比之下,strcmp()
检查指向的内存的内容,这可能是相等的。
顺便说一句,Java 中存在同样的问题:==
检查双方是否是相同的对象,类似于 C等效,而 .equals()
检查对象 contents,类似于 strcmp()
。
C# 为字符串重载了 ==
,因此它确实会查看内容,这对于运算符重载的语言来说意义重大可能(C 不是):几乎从来不需要测试对象的身份,而且正如我们所见,这是常见的错误来源。
关于C++ 服务器程序 Print While Loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50094465/
我是一名优秀的程序员,十分优秀!