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()函数(在字符串中搜索与其参数中指定的任何字符匹配的第一个字符)
std::string::find 总是返回 string::npos 甚至
C++ std::string::find_last_of()函数(在字符串中搜索与参数中指定的任何字符匹配的最后一个字符)(从后往前找)(文件路径中找文件名,/\兼容windows和linux)
C++ std::string::find_last_of()函数(在字符串中搜索与参数中指定的任何字符匹配的最后一个字符)(从后往前找)(文件路径中找文件名,/\兼容windows和linux)