【问题标题】:c++ string.find() returnes length of the stringc++ string.find() 返回字符串的长度
【发布时间】:2026-02-08 01:55:02
【问题描述】:

嗨,我有点困惑。我的程序使用 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++ 开发人员必备的技能。

标签: c++ string tcp find telnet


【解决方案1】:

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

"asdadsgdgsd\r\n"
 012345678901_2_

所以值 11 是正确的

【讨论】:

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