有一个大小为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函数的信任程度。

08-20 01:51