繁体   English   中英

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

[英]Comparing received string on server side - C++

我按照本教程( 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;
}

您正在尝试将字符指针与字符串文字进行比较(这将解析为字符指针),是的,您所拥有的代码肯定行不通(也不应该)。 由于您使用的是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类型,可以使用'=='运算符直接进行比较(并可以使用'+'运算符进行连接)。 但是,C代码仍然可以在C ++中运行,因此char *数组不一定要提升为std :: string,除非它们由std :: string运算符进行操作(即使这样,如果我还记得的话,它们并没有那么多由于运算符允许进行字符串/字符*比较而提升),因此(std :: string == char *)将执行预期的比较操作。 当我们执行std :: string(char *)时,我们调用std :: string构造函数,该构造函数返回一个与您的字符串文字进行比较的字符串(在这种情况下,是一个临时字符串)。

请注意,我假设incomming_data_buffer的类型为char *,尽管我看不到实际的声明,但您仍按原样使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM