有一个大小为 8 个字符的接收缓冲区。定义接收到的字符是一个字符串。没有定义(没有保证)字符串以零字符结尾。
简单的例子:
char cBuffer[ 8 ]{ 0 };
ReceiveIncommingMessage( cBuffer );
std::string sStringForFurtherComparison( cBuffer, strlen( cBuffer) );
此示例适用于接收到的字符串小于 8 字节的所有情况。我还想捕获这样的情况,即接收到的字符串不是以零字符结尾或者恰好是 8 字节长。
具有最大长度的 strlen_s( buffer, max_length )
可以解决这个问题,所以我可以做这样的事情:
std::string sStringForFurtherComparison( cBuffer, strlen_s( cBuffer, sizeof( cBuffer ) );
我在标准中没有找到这样的函数。有没有使用标准工具的优雅解决方案?也许是单线?
最佳答案
如果您将缓冲区长度设置为 9(以处理传入字符数恰好为 8 且不带终止符 '\0' 的情况),则此方法有效:
char cBuffer[ 9 ]{ 0 };
ReceiveIncommingMessage( cBuffer );
std::string sStringForFurtherComparison( cBuffer );
构造函数接受一个 char *
并且将在第一个“\0”字符处停止。因此这将处理长度为 0 到 8 个字符的消息。作为引用,即本页上的构造函数 (5):http://en.cppreference.com/w/cpp/string/basic_string/basic_string
我想补充一点,这取决于您对 ReceiveIncommingMessage
函数的信任程度。
关于c++ - 将 char 缓冲区安全(独立于平台)到 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43286254/