gpt4 book ai didi

c++ - 将(平台无关的)char 缓冲区安全到 std::string

转载 作者:搜寻专家 更新时间:2023-10-31 00:28:56 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com