提问人:Andrew 提问时间:4/30/2018 最后编辑:melpomeneAndrew 更新时间:4/30/2018 访问量:240
C++ 服务器程序打印 While 循环
C++ Server Program Print While Loop
问:
我正在创建一个服务器/客户端套接字程序,并且正在制作打印服务器输入的方法。
这是我的代码:
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语句?
答:
2赞
Daniel PC
4/30/2018
#1
在 C 语言中比较字符串的最好方法是使用(或者如果对未知字符串的安全性感兴趣)。strcmp()
strncmp()
相等运算符在操作数“衰减”为指针后直接比较操作数;指针不会改变,当然也不同。,相反,检查所指向的内存的内容,这可能是相等的。==
strcmp()
顺便说一句,Java 中也存在同样的问题:检查两端是否是相同的对象,类似于 C 等价物,同时检查对象内容,类似于 .==
.equals()
strcmp()
相比之下,C# 对字符串进行了重载,因此它确实会查看内容,这对于运算符重载可能(C 不是)的语言来说很有意义:测试对象的身份几乎从来都不是必需的,正如我们所看到的,这是一个常见的错误来源。==
评论
0赞
Peter - Reinstate Monica
4/30/2018
对不起,我有点劫持了你的答案;-)。我只想提供一些背景信息,然后得意忘形。但它是有用的信息,即使它在 SO 上是多余的。
评论
==
cin
std::string
std::string