比较服务器端收到的字符串 - C ++

时间:2015-03-28 16:06:54

标签: c++ networking client server

我遵循了本教程(http://codebase.eu/tutorial/linux-socket-programming-c/)并制作了一台服务器。问题是,当服务器从客户端收到字符串时,我不知道如何比较它。例如,以下内容无效:

bytes_received = recv(new_sd, incomming_data_buffer, 1000, 0);

if(bytes_received == 0)
    cout << "host shut down." << endl;

if(bytes_received == -1)
    cout << "receive error!" << endl;

incomming_data_buffer[bytes_received] = '\0';
cout << "Received data: " << incomming_data_buffer << endl;

//The comparison in the if below doesn't work. The if isn't entered
//if the client sent "Hi", which should work
if(incomming_data_buffer == "Hi\n")
{
    cout << "It said Hi!" << endl;
}

1 个答案:

答案 0 :(得分:1)

您正在尝试将字符指针与字符串文字(将解析为字符指针)进行比较,所以是的,您确实无法使用的代码(也不应该)。既然你在C ++中,我会建议:

if(std::string(incomming_data_buffer) == "Hi\n")
    cout<<"It said Hi!"<<endl;

现在,您需要为此工作包含字符串,但我假设您已经这样做了,特别是如果您使用此方法在代码中的其他位置比较字符串。

只是解释这里发生了什么,因为你似乎对C ++来说相对较新。在C中,字符串文字存储为const char *,可变字符串只是字符数组。如果你曾经编写过C,你可能还记得(char * == char *)实际上没有比较字符串,你需要使用strcmp()函数。

然而,

C ++引入了std :: string类型,可以使用&#39; ==&#39;直接进行比较。运算符(并使用&#39; +&#39;运算符连接)。但是,C代码仍然在C ++中运行,因此char *数组不一定会被提升为std :: string,除非它们由std :: string运算符操作(即便如此,如果我记得的话,它们也不是't&t; t因为运算符允许字符串/字符*比较,所以提升了很多,所以(std :: string == char *)将执行预期的比较操作。当我们执行std :: string(char *)时,我们调用std :: string构造函数,它返回一个与字符串文字进行比较的字符串(在本例中为临时字符串)。

请注意,我假设incomming_data_buffer的类型为char *,您正在使用它,虽然我无法看到实际的声明。