C++ 服务器程序打印 While 循环

C++ Server Program Print While Loop

提问人:Andrew 提问时间:4/30/2018 最后编辑:melpomeneAndrew 更新时间:4/30/2018 访问量:240

问:

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

这是我的代码:

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

c++ while循环 布尔逻辑

评论

2赞 CannedMoose 4/30/2018
尝试 strcmp 而不是比较==
2赞 melpomene 4/30/2018
如何比较字符串的可能重复项
3赞 user4581301 4/30/2018
除了上述建议之外,将 100,000 字节扔到堆栈(或用于提供自动存储的任何内容)可能会使您危险地接近堆栈溢出。如果您需要接受这么大的输入,请考虑使用 和 代替。 调整自身大小以适应,并从动态存储(通常比自动存储大几个数量级)进行分配。cinstd::stringstd::string
2赞 273K 4/30/2018
在那里看不到 C++。
1赞 melpomene 4/30/2018
@S.M.仅仅因为你不喜欢代码并不意味着它不是C++。

答:

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 上是多余的。