c++ string.find() 返回字符串的长度

Posted

技术标签:

【中文标题】c++ string.find() 返回字符串的长度【英文标题】:c++ string.find() returnes length of the string 【发布时间】:2019-04-18 14:47:26 【问题描述】:

嗨,我有点困惑。我的程序使用 TCP 通过网络传输消息。我认为这与我的问题无关。

std::stringstream tmp(buf);

            if (tmp.str().find("\r\n") == std::string::npos ) 
                std::cout << " doesnt have ending char" << std::endl;
            else
                std::cout << " position of ending char " << tmp.str().find("\r\n") << std::endl;
            

当从客户端读取消息时,它被推送到字符串流。然后我试图找到转义字符,不幸的是 string.find("\r\n") 总是返回字符串的长度,即使 buf 中不包含 "\r\n"。

我正在使用

远程登录

测试一下,这种行为是否可能是由 telnet 引起的?

这是我的终端的输出:

Connected to localhost.
Escape character is '^]'.
200 LOGIN
asdadsgdgsd

这是程序的输出:

3001 PORT NUM 
sent message: asdadsgdgsd  END  
position of ending char 11

【问题讨论】:

现在是您学习如何使用调试器的绝佳机会。使用调试器可以让您立即检查 tmp.str() 返回的内容,并解开您的谜团。这就是调试器的用途。了解如何有效地使用调试器是每个 C++ 开发人员必备的技能。 【参考方案1】:

在控制台输入然后发送和接收的字符串是

"asdadsgdgsd\r\n"
 012345678901_2_

所以值 11 是正确的

【讨论】:

所以您是在告诉我,当我使用 telnet 发送任何内容时,它会在消息末尾添加“\r\n”?我输入的消息只是“asdadsgdgsd”而不是“asdadsgdgsd \r\n Enter键完成telnet输入。这将发送以\r\n 结尾的字符串。这对于控制台应用程序很常见。

以上是关于c++ string.find() 返回字符串的长度的主要内容,如果未能解决你的问题,请参考以下文章

C++ std::string::find_first_of()函数(在字符串中搜索与其参数中指定的任何字符匹配的第一个字符)

C++:点后提取字符串

std::string::find 总是返回 string::npos 甚至

C++ std::string::find_last_of()函数(在字符串中搜索与参数中指定的任何字符匹配的最后一个字符)(从后往前找)(文件路径中找文件名,/\兼容windows和linux)

C++ std::string::find_last_of()函数(在字符串中搜索与参数中指定的任何字符匹配的最后一个字符)(从后往前找)(文件路径中找文件名,/\兼容windows和linux)

std::string::find 返回值问题