有一个大小为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 ) );
我还没有在标准中找到这样的功能。使用标准工具有没有优雅的解决方案?也许就行了?
答案 0 :(得分:5)
如果你使你的缓冲区长度为9(为了处理传入的字符数正好是8 w / o终止' \ 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
函数的信任程度。