Vik*_*ehr 2 c++ string c++11 c++14
有一个大小为8个字符的接收缓冲区.定义的是,接收的字符是字符串.没有定义(没有保证)字符串以零字符终止.
简单的例子:
char cBuffer[ 8 ]{ 0 };
ReceiveIncommingMessage( cBuffer );
std::string sStringForFurtherComparison( cBuffer, strlen( cBuffer) );
Run Code Online (Sandbox Code Playgroud)
当接收到的字符串小于8字节时,此示例适用于所有情况.我想要捕获这样的情况,其中接收的字符串不是由零字符终止或者正好是8字节长.
strlen_s( buffer, max_length )
具有最大长度的A 可以解决这个问题,所以我可以做这样的事情:
std::string sStringForFurtherComparison( cBuffer, strlen_s( cBuffer, sizeof( cBuffer ) );
Run Code Online (Sandbox Code Playgroud)
我没有在标准中找到这样的功能.使用标准工具有没有优雅的解决方案?也许就行了?
如果你使你的缓冲区长度为9(处理传入的字符数正好是8 w/oa终止'\ 0'的情况),那么这有效:
char cBuffer[ 9 ]{ 0 };
ReceiveIncommingMessage( cBuffer );
std::string sStringForFurtherComparison( cBuffer );
Run Code Online (Sandbox Code Playgroud)
构造函数接受a char *
,并且将在第一个'\ 0'字符处停止.因此,这将处理长度为0到8个字符的消息.供参考,这是本页的构造函数(5):http://en.cppreference.com/w/cpp/string/basic_string/basic_string
我想补充一点,这取决于你对这个ReceiveIncommingMessage
功能的信任程度.