1

我正在创建一个服务器/客户端套接字程序,并且正在制定一种打印服务器输入的方法。

这是我的代码:

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 语句?

4

1 回答 1

2

在C中比较字符串的最好方法是使用strcmp()(或者strncmp()如果有人对未知字符串的安全性感兴趣)。

相等运算符==直接比较操作数,在它们“衰减”到指针之后;指针不会改变,当然是不同的。strcmp()相比之下,检查指向的内存的内容,这可能是相等的。

顺便说一句,Java 中也存在同样的问题: ==检查双方是否是相同的对象,类似于 C 等效项,同时.equals()检查对象内容,类似于strcmp().

相比之下,C#==对字符串进行了重载,因此它确实会查看内容,这对于可以进行运算符重载(C 不是)的语言很有意义:几乎不需要测试对象的身份,并且,如我们所见,是常见的错误来源。

于 2018-04-30T05:47:34.903 回答