C++ 服务器程序 Print While Loop
C++ Server Program Print While Loop
我正在创建一个 server/client 套接字程序,并且正在制作一个打印服务器输入的方法。
这是我的代码:
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 语句以在输入 "Exit" 时执行?
在 C 中比较字符串的最佳方法是使用 strcmp()
(如果对未知字符串的安全性感兴趣,则使用 strncmp()
)。
相等运算符==
直接比较操作数,在它们"decay"为指针之后;指针不会改变,当然是不同的。 strcmp()
,相比之下,检查指向的 内存的内容, 可能相等。
顺便说一句,同样的问题存在于Java: ==
检查双方是否相同objects,类似于 C 等价物,而 .equals()
检查对象 contents,类似于 strcmp()
.
C#,相比之下,为字符串重载 ==
以便它确实会查看内容,这对于运算符重载的语言来说很有意义是可能的(C 不是):几乎从来不需要测试对象的身份,而且正如我们所见,这是常见的错误来源。
我正在创建一个 server/client 套接字程序,并且正在制作一个打印服务器输入的方法。
这是我的代码:
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 语句以在输入 "Exit" 时执行?
在 C 中比较字符串的最佳方法是使用 strcmp()
(如果对未知字符串的安全性感兴趣,则使用 strncmp()
)。
相等运算符==
直接比较操作数,在它们"decay"为指针之后;指针不会改变,当然是不同的。 strcmp()
,相比之下,检查指向的 内存的内容, 可能相等。
顺便说一句,同样的问题存在于Java: ==
检查双方是否相同objects,类似于 C 等价物,而 .equals()
检查对象 contents,类似于 strcmp()
.
C#,相比之下,为字符串重载 ==
以便它确实会查看内容,这对于运算符重载的语言来说很有意义是可能的(C 不是):几乎从来不需要测试对象的身份,而且正如我们所见,这是常见的错误来源。