Secure(plattform independent)char Buffer to std :: string

时间:2017-04-07 20:03:13

标签: c++ string c++11 c++14

有一个大小为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 ) );

我还没有在标准中找到这样的功能。使用标准工具有没有优雅的解决方案?也许就行了?

1 个答案:

答案 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函数的信任程度。